如何在C中输入n个字符串(n由用户输入)而不分配n个空格?

时间:2017-07-17 08:24:01

标签: c arrays string input scanf

我试图解决输入格式如下的问题 -

n       // no. of strings
first string
second string
.....
nth string    // n strings to be input separated by newlines

对于每个字符串输入,必须对其进行一些修改,并输出修改后的字符串。

我没有使用malloc为每个n字符串分配单独的空间,而是尝试了这种方法: -

char str[MAX_SIZE];
scanf("%d",&no_of_testcases);

    while(no_of_testcases -- ){

     scanf("%[^\n]s",str);

    /* some processing on the input string*/
    /* printing the modified string */

    }

在每次迭代中,不能使用相同的空格(str)多次存储用户输入字符串吗?给定的代码没有像我想要的那样表现/接受输入。

1 个答案:

答案 0 :(得分:2)

使用相同的缓冲区一次读取一行是完全正常的,只要你在进入下一行之前完全处理读入缓冲区的数据,很多程序都会这样做。

但请注意,您应该通过告知scanf()要存储到缓冲区中的最大字符数来防止潜在的缓冲区溢出:

char str[1024];
int no_of_testcases;

if (scanf("%d", &no_of_testcases) == 1) {
    while (no_of_testcases-- > 0) {
        if (scanf(" %1023[^\n]", str) != 1) {
            /* conversion failure, most probably premature end of file */
            break;
        }
        /* some processing on the input string */
        /* printing the modified string */
    }
}

在输入字符串之前跳过待处理的空格是消耗换行符的好方法,但是副作用是在输入行上跳过初始空白区域并忽略空行,这可能有用也可能没用。

如果需要更精确的解析,可以使用fgets()