字符类型指针内存分配?

时间:2017-12-22 08:41:39

标签: c string pointers char

#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)!='\0'){
            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不起作用。在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:-1)

"abcxyz"实际上是const char[7]类型,在某些情况下可以衰减const char*

char*类型;尝试修改字符串时的行为是 undefined

另一方面,

char s[ASIZE];是具有自动存储持续时间的char数组。您可以随意修改任何元素。