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);
其实strlen
returns一个字符串的长度(word
)没有初始化。因此,fgets
的当前限制是您堆栈中的结果。
我正在尝试创建自己的 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);
其实strlen
returns一个字符串的长度(word
)没有初始化。因此,fgets
的当前限制是您堆栈中的结果。