今天想通过地址直接修改字符串中字符
发现修改不了
我们先来看两个程序
程序1:
#pragma warning(disable : 4996)
#include <stdio.h>
#include <string.h>
int main()
{
char p_temp_body[] = "1234567890";
char* p = p_temp_body;
while (*p) { //定位到最后一个字符
p++;
}
*(p - 5) = 'n';
printf("%s\n", p_temp_body); //12345n7890
return(0);
}
程序2:
#pragma warning(disable : 4996)
#include <stdio.h>
#include <string.h>
int main()
{
char* p_temp_body = "1234567890";
char* p = p_temp_body;
while (*p) { //定位到最后一个字符
p++;
}
*(p - 5) = 'n'; //报错
printf("%s\n", p_temp_body);
return(0);
}
原因在于char p_temp_body[] = "1234567890";
和char* p_temp_body = "1234567890";
是不同的
前者存于栈区,后者存于数据段,栈区能直接通过地址修改内存,数据段貌似不行
所以才会出现上述报错
参考文章:怎样在C语言中修改字符串的一个字符的值