【发布时间】:2017-12-07 13:48:20
【问题描述】:
#include <stdio.h>
char *ft_strupcase(char *str);
char *ft_strupcase(char *str)
{
int i;
i = 0;
while (str[i])
{
if (str[i] >= 'a' && str[i] <= 'z')
{
str[i] -= 32;
}
i++;
}
return (str);
}
int main(void)
{
char *test = ft_strupcase("fdfFEhk");
for (int k = 0; test[k] != '\0'; k++)
{
printf("%c", test[k]);
}
return (0);
}
预期的结果是打印传递给函数的字符串,全部用大写字母。相反,我得到一个总线错误。为什么以及如何解决这个问题?
【问题讨论】:
-
你不能用字符串文字来做。见这里stackoverflow.com/questions/1614723/…
-
不能修改常量...
-
如果您使用调试器执行此程序,您会发现指令
str[i] -= 32;将在第一个while 循环周期引发分段错误。这是因为字符串"fdfFEhk"是一个常数。在 Linux 或 Windows 等操作系统下,这是一个错误。如果您在 DOS 下使用此代码,它应该可以运行。 -
它是same problem。你为什么不看那些答案?