C字符串数组问题

时间:2011-04-03 14:29:05

标签: c

我想输入:

  

abc def ghi jkl

,输出应为:

abc
def
ghi
jkl

我想将每个字符串存储在一个数组中,然后使用for循环来打印每个位置。

我有这段代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char vector[100];
    int i = 0;
    int aux = 0;
    while (i < 5)
    {
        scanf("%s", &vector[i]);
        i++;
        aux+= 1;
    }

    for (i=0;i<aux;i++)
    {
        printf("%s\n", &vector[i]);
    }

    return 0;
 }

我做错了什么?

第二个问题:

当我按 ctrl D 并打印输出时,如何更改代码以停止读取输入?

3 个答案:

答案 0 :(得分:2)

你在“向量”中取一个字符的地址,而不是填充几个字符串。这些修改:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char vector[5][100]; /* five times 100 characters, not just 100 characters */
    int i = 0;
    int aux = 0;
    while (i < 5)
    {
        scanf("%s", vector[i]); /* notice the & is gone */
        i++;
        aux+= 1;
    }

    for (i=0;i<aux;i++)
    {
        printf("%s\n", vector[i]); /* notice the & is gone */
    }

    return 0;
 }

至于ctrl-D位,你可以让它在输入结束时停止读取,但是你必须管理大量的输入(所以你可能需要动态分配你所在的缓冲区)解析“你的字符串scanf

答案 1 :(得分:0)

您正在使用单个char数组来存储多个字符串。您可以这样使用二维数组:

char vector[STRING_NUM][STRING_MAX_LENGTH]

答案 2 :(得分:0)

你有一个字符数组(即一个字符串)。

如果你想要一个字符串数组,那就是一个字符数组数组:

char vector[NUM_STRINGS][NUM_CHARS];