2014-10-31 37 views
-2

现在我一直在使用指针和malloc,当我试图做到这一点时,我的编译器告诉我,str [0] ='a'有一个EXC_BAD_ACCESS。我在这个简单的程序中的目标是创建一个包含字符的指针,然后开始使所有字母都为小写。但它看起来像我甚至不能修改指针指向的内容。任何和所有的帮助,非常感谢。如何修改字符指针

main(){ 

char *str = malloc(sizeof(char)*10); 

if(str == NULL){ 
    printf("Error"); 
} 

str = "AsDf"; 

str[0] = 'a'; 

printf("%s", str); 

return 0; 


} 
+0

这东西是覆盖在任何初学者ç教程,并已问了万亿次。请问你在Stackoverflow上提出问题之前先进行研究。 – dandan78 2014-10-31 20:26:54

回答

2

使用

strncpy(str, 10, "AsDf"); 

,而不是

str = "AsDf"; 
+0

这是正确的。为了进一步解释,最初你有'str'指向'malloc'分配的10字节内存区域。当你执行'str =“AsDf”;'你正在设置'str'来指向另一块内存,即字符串'“AsDf”'。这个字符串常量可能放入只读存储器部分。所以当你试图修改'str [0]'时,你会遇到访问错误,因为你正试图写入一个只读存储器地址。 – JS1 2014-10-31 20:27:00

+0

这很有道理。非常感谢你! – Tornadoe1123 2014-10-31 20:30:48

0
str = "AsDf"; 

这里该行分配str到一个字符串。字符串文字是不可变的;他们不能改变。你将不得不对其进行初始化像这样让你的代码工作:

str = {'A', 's', 'D', 'f', '\0'}; 
+0

非常感谢!这就说得通了。一直坚持这一点。 – Tornadoe1123 2014-10-31 20:25:05

+0

@ Tornadoe1123没问题! – phantom 2014-10-31 20:26:31

+0

@ Tornadoe1123 ensc的回答比我的正确得多,我建议接受他的回答! – phantom 2014-10-31 20:27:56