我试图制作自己的str_to_upper函数,但当我输入的内容超过5个字符时,它只返回前5个字符和一个'\0'字符。我猜测word[5]应该是'\0',这意味着我的代码返回了一个长度为6个字符的字符串,但我不明白这个'\0'来自哪里。
我的代码:
#include <stdio.h>
#include <ctype.h>
#include <string.h>
char *str_to_upper(char *);
int main()
{
char word[20];
puts("Please enter a word: ");
fgets(word, strlen(word), stdin);
puts(str_to_upper(word));
return 0;
}
char *str_to_upper(char *sentence)
{
int length=strlen(sentence);
for(int i=0; i<length; i++)
{
sentence[i]=toupper(sentence[i]);
}
return sentence;
}
输出:
Please enter a word:
aaaaaaaaaaa
AAAAA
当我在我的数组内放置for循环写入时,我得到了以下结果:
Please enter a word:
aaaaaaaaaaa
AAAAA
AAAAA0��}y
strlen
以获取其实际长度。在这里:fgets(word, strlen(word), stdin)
,word
没有被初始化。fgets
需要填充缓冲区的大小,因此在这里应该使用sizeof(word)
,在您的情况下是20。(但您在str_to_upper
中使用strlen
是正确的。) - M Oehmint length=strlen(sentence); for(int i=0; i<length; i++)
会将word
下降两次。替代方案:for(int i=0; word[i]; i++)
或更好的for(size_t i=0; word[i]; i++)
。 - chux - Reinstate Monica