分段错误反转字符串文字 你的代码试图修改一个字符串文字,如果你改变了,则在C或C++中是不允许的:< /P> char s[6] = {'h','e','l','l','o','\0'}; char *s = "hello";
致:分段错误反转字符串文字 你的代码试图修改一个字符串文字,如果你改变了,则在C或C++中是不允许的:< /P> char s[6] = {'h','e','l','l','o','\0'}; char *s = "hello";,c,C,致: 然后修改数组的内容,将文本复制到该数组中(相当于使用单个字符初始化数组),这是正常的。如果执行chars[6]={h'、'e'、'l'、'l'、'o'、'\0'}将6个字符放入堆栈上的数组中。当您执行char*s=“hello”堆栈上只有一个指针,它指向的内存可能是只读的。写入该内存会导致未定义的行为。对于某些版本的gcc,您可以使用-fwritable字符串修改静态字符串。并不是说真的有什么好的借口可以这么做。你可以试试这个: char s[] = "hello"; void str
然后修改数组的内容,将文本复制到该数组中(相当于使用单个字符初始化数组),这是正常的。如果执行
chars[6]={h'、'e'、'l'、'l'、'o'、'\0'}
将6个字符放入堆栈上的数组中。当您执行char*s=“hello”代码>堆栈上只有一个指针,它指向的内存可能是只读的。写入该内存会导致未定义的行为。对于某些版本的gcc,您可以使用-fwritable字符串修改静态字符串。并不是说真的有什么好的借口可以这么做。你可以试试这个:
char s[] = "hello";
void strev(char*in,char*out,int len){
int i;
对于(i=0;i
请注意,它不处理字符串终止符。可能是另一个标题?虽然示例是用于反转字符串的代码,但实际的问题是关于修改数组和字符串文字您是否有任何理由不使用strev()
?此外,这将使用多字节字符中断。
char *s = "hello";
char s[] = "hello";
void strrev(char *in, char *out, int len){
int i;
for(i = 0; i < len; i++){
out[len - i - 1] = in[i];
}
}