c语言 - 如果我将字符串作为变量传入,为什么我的将字母转换为大写的函数不起作用?



我用C写了一个函数,将所有小写字母转换为带有指针的大写字母。它如下所示:

char    *ft_strupcase(char *str)
{
char    *str_begin;
str_begin = str;
while (*str != '')
{
if (*str >= 'a' && *str <= 'z')
{
*str = *str - 32;
}
str++;
}
return (str_begin);
}

但是,如果我使用以下主要函数进行测试,它将给出总线错误:

#include "ft_strupcase.c"
int main(void)
{
printf("The string "I am your father" is now %sn", ft_strupcase("I am your father"));
return (0);
}

错误消息如下所示:

/bin/sh: line 1: 79346 Bus error: 10

但是如果我创建一个字符串变量来存储字符串,则没有总线错误。例如,如果我使用以下主函数对其进行测试:

#include "ft_strupcase.c"
int main(void)
{
char test_string[50] = "I am your father";
printf("The string "I am your father" is now %sn", ft_strupcase(test_string));
return (0);
}

它工作正常,输出为:

The string "I am your father" is now I AM YOUR FATHER

我真的不明白第一次测试与第二次测试有何不同。谁能向我解释为什么会发生这种情况?

C 标准声明字符串文本是只读的。 在许多情况下,它们实际上存储在内存的只读部分中。

当您尝试修改字符串文本时,将调用未定义的行为,在这种情况下,这会导致程序崩溃。

相反,您在第二个示例中传递的数组是可写的,因此程序成功运行。

相关内容

  • 没有找到相关文章

最新更新