我需要获取一个最大长度为50个字符的用户输入字符串。因此,我将MAX_STRING_LENGTH
变量定义为50,字符串初始化为51个字符。但是,每次输入大于48个字符时,都会从最后两个字符中剪切字符串。这是一项学校练习,但我无法使用<string.h>
。
#include <stdio.h>
#define MAX_STRING_LENGTH 50
int main(void)
{
int j=0;
char stringInput[MAX_STRING_LENGTH+1]; //string initialized.
printf("Please enter a valid string\n");
fgets(stringInput,MAX_STRING_LENGTH,stdin); //string input.
for(j=0;stringInput[j]!='\0';j++);
if(j<MAX_STRING_LENGTH+1)
{
j=j-1;
stringInput[j]='\0'; //remove newline if it exists
}
//...
return 0;
}
我不明白为什么字符串会丢失2个字符。
我假设在使用\n
时总是创建换行符(fgets
)(即使输入了50个字符的完整字符串),并且我总是丢失1个字符(因此我必须增加字符串的字符串大小)。但是我不明白其他角色是如何丢失的。
感谢您的反馈意见。谢谢
答案 0 :(得分:0)
在此次电话会议中
fgets(stringInput,MAX_STRING_LENGTH,stdin);
您指定最多MAX_STRING_LENGTH - 1
个字符将在数组stringInput
中读取。
如果您希望数组可以包含一个包含50个字符的字符串(不包括终止零),那么您必须调用fgets
之类的
fgets(stringInput,MAX_STRING_LENGTH + 1,stdin);
但是在这种情况下,如果用户输入正好50个字符,则与输入的键Enter对应的新行字符仍将位于输入缓冲区中。要提取它,你应该至少声明数组
char stringInput[MAX_STRING_LENGTH + 2];
并像
一样编写电话fgets(stringInput,MAX_STRING_LENGTH + 2,stdin);
然而,最初宣布MAX_STRING_LENGTH
等于52。
答案 1 :(得分:0)
这个小循环
for(j=0;stringInput[j]!='\0';j++);
if(j<MAX_STRING_LENGTH+1)
{
j=j-1;
stringInput[j]='\0'; //remove newline if it exists
}
删除最后一个字符,无论它包含什么内容。
答案 2 :(得分:-1)
这是[c]而不是[c ++]问题。
的文档