以下代码在第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编程和指针操作方面做得更好),但我无法弄清楚为什么我会遇到分段错误:
#include <string.h>
void reverse(char *s);
int main() {
char* s = "teststring";
reverse(s);
return 0;
}
void reverse(char *s) {
int i, j;
char temp;
for (i=0,j = (strlen(s)-1); i < j; i++, j--) {
temp = *(s+i); //line 1
*(s+i) = *(s+j); //line 2
*(s+j) = temp; //line 3
}
}
Run Code Online (Sandbox Code Playgroud)
它是第2行和第3行导致分段错误.我知道可能有更好的方法来做到这一点,但我有兴趣找出我的代码中特别导致分段错误的内容.
更新:我已根据要求包含了调用函数.
如果我定义如下的内容,
char *s1 = "Hello";
Run Code Online (Sandbox Code Playgroud)
为什么我不能做下面这样的事情,
*s1 = 'w'; // gives segmentation fault ...why???
Run Code Online (Sandbox Code Playgroud)
如果我做下面的事情会怎么样
string s1 = "hello";
Run Code Online (Sandbox Code Playgroud)
我可以做下面这样的事情,
*s1 = 'w';
Run Code Online (Sandbox Code Playgroud) 以下代码在我的系统上产生分段错误.我无法弄清楚为什么.任何帮助,将不胜感激.
#include<stdio.h>
int main() {
char * a = "abc";
*a = 'c';
printf("%c\n", *a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)