为什么我使用以下方法,用于将字符串中的所有字符转换为大写,
while (*postcode) {
*postcode = toupper(*postcode);
postcode++;
}
Run Code Online (Sandbox Code Playgroud)
使用以下参数有效,
char wrong[20];
strcpy(wrong, "la1 4yt");
Run Code Online (Sandbox Code Playgroud)
但是,以下,不是,尽管它们是相同的?
char* wrong = "la1 4yt";
Run Code Online (Sandbox Code Playgroud)
我的程序崩溃试图写入非法地址(我认为是一个段错误).这不是问题malloc吗?不是无效的?它应该不是......
通过调试我发现它在尝试将第一个字符分配为大写时崩溃了.
任何帮助赞赏!
char* wrong = "la1 4yt";
Run Code Online (Sandbox Code Playgroud)
这声明了一个指向字符串常量的指针.常量无法修改,这就是您的代码崩溃的原因.如果你写的更迂腐
const char* wrong = "la1 4yt"; // Better
Run Code Online (Sandbox Code Playgroud)
然后编译器会抓住错误.您应该在声明指向字符串文字的指针而不是创建数组时执行此操作.
另一方面,这为20个字符分配读/写存储,因此写入空间是好的.
char wrong[20];
Run Code Online (Sandbox Code Playgroud)
如果你想将它初始化为上面的字符串,你可以这样做,然后可以改变它.
char wrong[20] = "la1 4yt"; // Can be modified
char wrong[] = "la1 4yt"; // Can be modified; only as large as required
Run Code Online (Sandbox Code Playgroud)