C 问题:为什么我的 20 个长度的字符串将自己限制为 6 个字符?

C question: why is my 20 length string limits itself with 6 chars?

我正在尝试创建自己的 str_to_upper 函数,但是当我写的内容超过 5 个字符时,它只会 returns 前 5 个字符和一个 '\0' 字符。 我猜 word[5] 应该是 '\0',这意味着我的代码 returns 是一个 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

只需替换您的

fgets(word, strlen(word), stdin);

fgets(word, sizeof(word), stdin);

其实strlenreturns一个字符串的长度(word)没有初始化。因此,fgets 的当前限制是您堆栈中的结果。