0
点赞
收藏
分享

微信扫一扫

C语言常量字符串(数据段)与普通字符串(栈区)存放在不同内存区域的区别?(数据段不能直接修改内存?)

Ewall_熊猫 2022-03-16 阅读 89
c语言

今天想通过地址直接修改字符串中字符

发现修改不了

我们先来看两个程序

程序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语言中修改字符串的一个字符的值

举报

相关推荐

0 条评论