【问题标题】:using pointer to char vs char array [duplicate]使用指向char vs char数组的指针[重复]
【发布时间】:2020-06-07 16:29:56
【问题描述】:

我想知道为什么在使用指向 char 的指针时会出现问题,但是当我使用 char 数组时,却什么也没得到,而且它可以工作?

int main()
{
    char* s="hello world124";   //doesn't work;
    //char s[20]="hello world124"; // it does work
    int i=0;
    for(;i<strlen(s);i++)
    {
        while(!(s[i]>='a' && s[i]<='z') && !(s[i]>='A' && s[i]<='Z') && s[i]!='\0' && s[i]!=32)
        {
            for(int j=i;s[j]!='\0';j++)
                s[j]=s[j+1];
        }
    }
    s[i]='\0';
    printf("%s",s);

    return 0;
}

【问题讨论】:

  • @pzaenger 编译器会附加终止的 null - 这意味着任何字符串文字都以这种方式终止。
  • 声明 char* s="hello world124"; 使 s 成为指向 constant 字符串文字的指针,如链接副本中所述。但是char s[20]="hello world124"; 声明了一个 modifiable 数组,并使用字面量中的 data 对其进行初始化。

标签: c


【解决方案1】:

char* s="hello world124";

s 是一个指向 字符串字面量 的指针。您不能在 C 中修改字符串文字。这是一种未定义的行为

char s[20]="hello world124"; 是一个可以修改的字符数组

char s[20]="hello world124";
char* p = s;

p 正在引用 char 数组。你可以修改它。

char* s=(char []){"hello world124"}; - s 引用 char 数组 - 你可以修改它

【讨论】:

    猜你喜欢
    • 2021-01-26
    • 2018-04-05
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    相关资源
    最近更新 更多