字符串数组的数组

时间:2014-09-28 13:23:23

标签: c arrays string

所以我想发送像

这样的输入
ls -l | ./a.out

到以下程序

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

int main (int argc, char *argv[])
{
    char virtualLs[100];
    char eachLineOfLsInArray[100][100];
    scanf("%[^\t]", virtualLs);
    char *eachLineOfLs;
    eachLineOfLs = strtok(virtualLs, "\n");
    int loopCounterForStuffing;
    loopCounterForStuffing = 0;
    while (eachLineOfLs != NULL)
    {
        strcpy(eachLineOfLsInArray[loopCounterForStuffing], eachLineOfLs);
        eachLineOfLs = strtok(NULL, "\n");
        ++loopCounterForStuffing;
    }
    char newLsArray[100][sizeof(eachLineOfLsInArray) / sizeof(char)];
    int i;
    for(i = 0; i < sizeof(eachLineOfLsInArray) / sizeof(char); i++)
    {
        char *array[10];
        int k=0;
        array[k] = strtok(eachLineOfLsInArray[i], " ");
        while(array[k] != NULL)
        {
        array[++k] = strtok(NULL, " ");
        }
        newLsArray[i] = array;
        printf ("res[%d] = %s\n", i, array[i]); 
    }

我在编译中收到以下错误消息

largest.c:31:17: error: array type 'char [10000]' is not assignable
                newLsArray[i] = array;
                ~~~~~~~~~~~~~ ^
1 error generated.

该程序的目的是将每一行放入一个包含其单词作为数组的数组中。

2 个答案:

答案 0 :(得分:1)

使用strcpy功能:

而不是

newLsArray[i] = array;

strcpy(newLsArray[i], array);

答案 1 :(得分:1)

当您定义类似char [10]的数组时,其类型为char [10]而不是char *,因此array的类型为char [10],而newLsArray[i]的类型为{{1} }这是不同的,所以你得到一个类型错误,你可以使用char [sizeof(eachLineOfLsInArray) / sizeof(char)]或使用指针和strcpy命令,这样行malloc将起作用。

要使用指针,您需要将数组定义为char *,将二维数组定义为char **并相应地对其进行malloc。