字符类型指针内存分配? [重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符类型指针内存分配? [重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
#include<stdio.h>
#define ASIZE 50
void Reverse(char *str){
int Asize,i=0;
char temp;
// Find the length of the string
while(*(str+i)!=' '){
i++;
}
Asize=i;
// string reverse
for(i=0;i<(Asize/2);i++){
temp = *(str+i);
//may be below is some error with first input method 1
//but for input method 2 it works perfectly
*(str+i) = *(str+(Asize-(i+1)));
*(str+(Asize-(i+1))) = temp;
}
}
int main()
{
//input method 1. (error aries while i pass the pointer as argument)
char *s = "abcxyz";
//input method 2 (works perfectly while as function parameter)
char s[ASIZE];
scanf("%s",s);
Reverse(s);
printf("%s",s);
}
在主要的输入方法1不能完美地用于字符串的反向,但方法2工作。我的概念对于char指针的内存表示并不清楚。也许我不善于正确地提出问题,但有人请说清楚为什么方法1不起作用。在此先感谢您的帮助。
答案
"abcxyz"
实际上是一种const char[7]
类型,在某些情况下可以腐烂到const char*
。
它不是char*
类型;尝试修改字符串的行为是未定义的。
另一方面,char s[ASIZE];
是一系列具有自动存储持续时间的char
。您可以随意修改任何元素。
以上是关于字符类型指针内存分配? [重复]的主要内容,如果未能解决你的问题,请参考以下文章
C 语言结构体 ( 结构体中嵌套一级指针 | 分配内存时先 为结构体分配内存 然后再为指针分配内存 | 释放内存时先释放 指针成员内存 然后再释放结构头内存 )