分段错误逆转字符串文字

前端之家收集整理的这篇文章主要介绍了分段错误逆转字符串文字前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > Why is this string reversal C code causing a segmentation fault? 8个
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    //char s[6] = {'h','e','l','o','\0'};
    char *s = "hello";       
    int i=0,m;
    char temp;

    int n = strlen(s);
    //s[n] = '\0';
    while (i<(n/2))
    {
         temp = *(s+i);       //uses the null character as the temporary storage.
         *(s+i) = *(s+n-i-1);
         *(s+n-i-1) = temp;
         i++;
    }
    printf("rev string = %s\n",s);
    system("PAUSE");
    return 0;
}

在编译时,错误是分段错误(访问冲突).请告诉我们两个定义有什么区别:

char s[6] = {'h','\0'};
char *s = "hello";

解决方法

您的代码尝试修改C或C中不允许的字符串文字如果您更改:
char *s = "hello";

至:

char s[] = "hello";

那么你正在修改数组的内容,文本已被复制到该数组中(相当于用单个字符初始化数组),这是可以的.

猜你在找的C&C++相关文章