|
今天想通过地址直接修改字符串中字符
发现修改不了
我们先来看两个程序
程序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);
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语言中修改字符串的一个字符的值
|