当我在Windows上使用codeblock构建此代码时,它会显示一个控制台窗口并停止运行,请帮我修复它
#include <stdio.h>
#include <string.h>
int main ()
{
char *str="these";
strupr(str);
printf("%s", str);
return 0;
}
答案 0 :(得分:1)
问题在于你的字符串定义,而不是使用strupr,因为上面的一些评论已经强调了它。您的str
指针确实指向只读内存,因此崩溃。
看看引用c-faq.com的这个question,或者直接在C standard中:“数组的内容是可修改的。另一方面,声明
char *p = "abc";
使用“指向char的指针”类型定义p并将其初始化为指向类型为“array of char”且长度为4的对象,其元素使用字符串文字初始化。如果尝试使用p修改数组的内容,行为未定义。“
要使代码工作,只需定义一个非const数组:
char str[]="these";