处理C中的字符串输入

时间:2015-11-01 19:58:45

标签: c arrays

我正在尝试将字符串输入到固定大小的char数组中。 我有一个问题:

  1. 当我输入一个比char数组大的字符串时,数组变得更大而没有任何额外的声明。我想使代码只采用'等于或小于char数组'的字符串。
  2. 谢谢。

    CODE:

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <string.h>
    
    /***************************Function****************************/
    int string_length(char s[]) {
        int c = 0;
    
        while (s[c] != '\0')
            c++;
    
        return c;
    }
    /**************************************************************/
    char *str;
    int arrSize;
    
    void opt1()
    {
        printf("Enter array size: ");
        scanf("%d", &arrSize);
        arrSize=arrSize+1;
        str = malloc(arrSize);
        return;
    }
    
    void opt2()
    {
        printf("Enter characters: ");
        scanf("%s", str);
    
        length = string_length(str);
    
        printf("your input is '%s'\n", str);
        printf("your input length is '%d'\n", length);
    
        return;
    }
    
    int main()
    {
        int input = 0;
    
        while(input != 3) {
            printf("\n NAME \n");
            printf("\n");
    
            printf("--------------------------------------\n");
            printf("1) Making Array \n");
            printf("2) Check Array \n");
            printf("3) Quit\n");
            printf("\nEnter selection: ");
            scanf("%d", &input);
    
            if( input == 1 ) {
                /* */
                opt1();
            }
            else if(input == 2) {
                opt2();
            }
    
    
        }
        return 1;
    }
    

2 个答案:

答案 0 :(得分:2)

OP想要读取数据,但如果比目标数组大,则不要更改目标数组。

Test3::test3

通常代码可以使用// 1: success // -1 EOF // 0: Input too long int read_array(char *buffer, size_t size) { char tmp[size]; size_t i = 0; int ch; while ((ch = fgetc(stdin)) != EOF && ch != '\n') { if (i < size) { tmp[i++] = ch; } } if (ch == EOF && i == 0) return EOF; if (i >= size) return 0; // too many memcpy(buffer, tmp, i); buffer[i] = '\0'; return 1; } ,但是有些案例无法达到OP目标。

答案 1 :(得分:1)

要阅读整行,您可以使用fgets

char line[80];

if (fgets(line, sizeof line, stdin) != NULL) {
    // use the input
}

现在您不需要检查用户是否输入了超过限制,因为fgets只会获得前79个(空终止符为-1)字符;剩下的,如果有的话,将被忽略。