prev up next   top/contents search

comp.lang.c FAQ 列表· 第 16.6 题

为什么此代码

char *p = "hello, world!";
p[0] = 'H';
会崩溃?


字符串常量实际上是常数。编译器可能会将它们放置在不可写入的存储区中,因此修改它们是不安全的。当您需要可写字符串时,您必须为它们分配可写内存,方法是声明一个数组,或者调用malloc。试着

	char a[] = "hello, world!";

根据同样的论点,旧的 Unixmktemp例程

	char *tmpfile = mktemp("/tmp/tmpXXXXXX");
是不可移植的;正确用法是
	char tmpfile[] = "/tmp/tmpXXXXXX";
	mktemp(tmpfile);

参见问题 1.32

参考:ISO 第 6.1.4 节
H&S 第 2.7.4 节,第 31-2 页


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管