消息关闭
    暂无新消息!

c语言字符串作为函数输入问题

问题作者 : 仔肥2017-07-01发布
char ss[]="1234";  void test(char *ss){ss[0]='9';}  如果用调用test(ss);没有问题 如果test("1234");则出现内存dump错误 是什么原因?能在函数里判断是两种输入方式的哪种吗

5个回答

︿ 2
字符串是一个常量!

 void test(char *ss){ss[0]='9';} 

char ss[]="1234";  
这种方式没有问题是因为,定义数组时,将字符串中的数据复制到数组中,而test函数中修改的是数组ss,而不是字符串;

test("1234")
这种方式则是直接把字符串的首地址赋值到形参变量ss中,那么ss所指向的就是一个字符串。

这两个的地址值是不一样的,而且差距很大,可以根据这一点做一个简单的区分。
︿ 0
因为传递"1234",这个字符串是在只读数据段上,那么它只能只读,不能写。test函数里对其赋值,就是写操作,所以就会出现段错误。
而传递ss,ss是在栈上申请的空间,具有读写操作的权限。所以没问题。
char ss[]="1234"; 

这句的含义是将”1234“从只读数据段拷贝至数组ss中。 
︿ 0
#pragma comment(linker,"/SECTION:.rdata,RW")
//加这句可以让常量区可写,后果自负!
︿ 0
符号常量,其特点是编译后写在代码区,不可寻址,不可更改,属于指令的一部分。