我正在尝试用c语言编写一个简单的代码(愚蠢的问题,但我正在学习),我不明白这段代码给了我一个错误......我一定做错了,我不知道那个我必须改变...对不起我的英语...先谢谢所有
#include <stdio.h>
#include <ctype.h>
char* to_up(char* str_);
int main()
{
char any_phrase[] = "This is a phrase";
printf("%s\n", to_up(any_phrase));
printf("%s\n", to_up("this is another phrase"));
return 0;
}
char* to_up(char* str_)
{
int i;
for (i=0; str_[i]; i++)
str_[i] = toupper(str_[i]);
return str_;
}
答案 0 :(得分:3)
错误的原因是,当您将字符串作为“这是另一个短语”传递时,就像未包含在变量中一样,该字符串就是所谓的字符串文字。这意味着,除其他外,字符串是常量:你根本不允许修改。
要解决您的问题,您必须将字符串存储在变量中,以便允许您通过to_up()函数调用来修改它,因为它会修改字符串的内容。
答案 1 :(得分:2)
字符串文字通常位于只读内存中。就标准而言,尝试修改它将导致未定义的行为,无论它在内存中的位置如何。已经有关于此问题的许多问题。
答案 2 :(得分:1)
在此次电话会议中
printf("%s\n", to_up("this is another phrase"));
您正在尝试修改字符串文字。
答案 3 :(得分:1)
代码为我编译好,但在运行时发出总线错误(核心转储)。
问题是字符串文字可以存储在只读内存中,因此您无法像代码那样修改文字字符串。如果启用了足够的编译器警告,编译器将发出警告(GCC要求-Wwrite-strings
- 至少在GCC 4.4及更高版本中)。