#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)
您正在尝试修改调用未定义行为的字符串文字的内容.字符串文字通常存储在内存的只读部分中,并具有静态存储持续时间.
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"
.文字的内容将被复制到堆栈中,如果您尝试修改内容,则不会出现任何段错误.