字符串被削减两个字符

时间:2016-11-22 16:54:19

标签: c string

我需要获取一个最大长度为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个字符(因此我必须增加字符串的字符串大小)。但是我不明白其他角色是如何丢失的。

感谢您的反馈意见。谢谢

3 个答案:

答案 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 ++]问题。

fgets

的文档