相关疑难解决方法(0)

为什么在写入用"char*s"而不是"char s []"初始化的字符串时会出现分段错误?

以下代码在第2行接收seg错误:

char *str = "string";
str[0] = 'z';  // could be also written as *str = 'z'
printf("%s\n", str);
Run Code Online (Sandbox Code Playgroud)

虽然这非常有效:

char str[] = "string";
str[0] = 'z';
printf("%s\n", str);
Run Code Online (Sandbox Code Playgroud)

经过MSVC和GCC测试.

c c-strings segmentation-fault

277
推荐指数
10
解决办法
7万
查看次数

函数参数中的字符串

int main()
{
        char *x = "HelloWorld";
        char y[] = "HelloWorld";

        x[0] = 'Z';
        //y[0] = 'M';

        return 0;
}
Run Code Online (Sandbox Code Playgroud)

在上面的程序中,HelloWorld将处于只读部分(即字符串表).x将指向该只读部分,因此尝试修改该值将是未定义的行为.

但是y将在堆栈中分配HelloWorld并将被复制到该内存中.所以修改y将正常工作.字符串文字:指针与字符数组

这是我的问题:

在下面的程序中,都char *arrchar arr[]使段错误,如果内容被修改.

void function(char arr[])
//void function(char *arr)
{
   arr[0] = 'X';
}        
int main()
{
   function("MyString");    
   return 0;
}
Run Code Online (Sandbox Code Playgroud)
  1. 它在功能参数上下文中有何不同?
  2. 没有为功能参数分配内存?

请分享您的知识.

c gcc string-literals function-parameter

12
推荐指数
2
解决办法
10万
查看次数

修改字符串文字

为什么我运行这个程序时没有输出.

#include<stdio.h>

int main()
{
    char* t="C++";
    t[1]='p';
    t[2]='p';
    printf("%s",t);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c

9
推荐指数
3
解决办法
1万
查看次数