Coredump在处理反转字符串的函数时

Mik*_*ike 1 c string reverse

#include  <stdio.h>
#include  <string.h>

main()
{
    char tmpChar;
    char *str_1 = "Hello";

    int index;
    int len = strlen(str_1);
    for (int i = 0; i < len/2; i++)
    {
        index = len - 1- i;
        tmpChar = str_1[len - i -1];
        str_1[index] = str_1[i]; <<<<<--------------- core dumps at this point. Not sure why
        str_1[i] = tmpChar;
        printf("str_1[%d] = %c\n", i, str_1[i]);
    }
    str_1[len] = '\0';
    printf("str_1 = %s\n", str_1);
}
Run Code Online (Sandbox Code Playgroud)

Pra*_*rav 5

您正在尝试修改调用未定义行为的字符串文字的内容.字符串文字通常存储在内存的只读部分中,并具有静态存储持续时间.

char *str_1 = "Hello";.在这种情况下"Hello"是一个字符串文字(存储在只读部分),你试图通过这样做来修改内容

str_1[index] = str_1[i];
Run Code Online (Sandbox Code Playgroud)

而不是str_1指向文字[ie char *str_1 = "Hello"] 的指针使它成为一个字符数组即char str_1[] = "Hello".文字的内容将被复制到堆栈中,如果您尝试修改内容,则不会出现任何段错误.