字符类型指针内存分配? [重复]

问题描述 投票:-1回答:1
#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不起作用。在此先感谢您的帮助。

c string pointers char
1个回答
-1
投票

"abcxyz"实际上是一种const char[7]类型,在某些情况下可以腐烂到const char*

它不是char*类型;尝试修改字符串的行为是未定义的。

另一方面,char s[ASIZE];是一系列具有自动存储持续时间的char。您可以随意修改任何元素。

© www.soinside.com 2019 - 2024. All rights reserved.