将字符串从2d数组复制到1d数组中

时间:2013-09-19 14:54:18

标签: c arrays

我在处理C中的指针时遇到了一些麻烦。

我的代码加载来自文本文件的大量字符

1378251369.691375   84:1b:5e:a8:bf:7f   68:94:23:4b:e8:35   100
1378251374.195670   00:8e:f2:c0:13:cc   00:11:d9:20:aa:4e   397
1378251374.205047   00:8e:f2:c0:13:cc   00:11:d9:20:aa:4e   397
1378251374.551604   00:8e:f2:c0:13:cc   00:11:d9:20:aa:4e   157
1378251375.551618   84:1b:5e:a8:bf:7c   cc:3a:61:df:4b:61   37

然后将每一行复制到一个数组中(fullinfo [200] [BUFSIZ])。

然后我试着评估最后两条信息并将它们放入自己的数组中 例如

 cut2line[0] = 68:94:23:4b:e8:35    100
 cut2line[1] = 00:11:d9:20:aa:4e    397

为此我尝试了strcpy和memcpy

     fullinfo[200][BUFSIZ];
     char cutline[BUFSIZ];
     char cut2line[BUFSIZ];

      while( fgets(line, sizeof line, pi) != NULL)  {

            strcpy(fullinfo[infoline], line);

             strcpy(cutline,fullinfo[infoline]);
             memcpy(cut2line,*cutline[25],100);
             printf("%s",cutline);      
             infoline ++;

    }

两者都给出了

invalid type of argument of unary '*' (have 'int')

或涉及错误指针类型的东西。

感谢任何帮助。

编辑澄清:cutline包含来自输​​入文件的整行是正确的,但是当我尝试将该行的第二部分复制到其自己的数组中时,我得到了错误

2 个答案:

答案 0 :(得分:0)

while( fgets(line, sizeof line, pi) != NULL)  {

        strcpy(fullinfo[infoline], line);

         strcpy(cutline,fullinfo[infoline]);
         //memcpy(cut2line,*cutline[25],100); This line is what's causing your issue I think.
         memcpy(cut2line,&cutline[25],100); //Use an & 
         printf("%s",cutline);      
         infoline ++;

}

答案 1 :(得分:0)

这里有几件事。

char cut2line[BUFSIZ];

这意味着声明并定义一个字符数组,即一个单字符数组。我想你想要一个字符串指针数组,即

char *cut2line[200]; //not sure if the size is right here.

接下来,由于这只是一个指针数组,因此您必须分配指针实际指向的内容。您可以使用malloc()甚至strdup(),它可以使用malloc()。

(或者您可以使用堆栈分配的2D字符数组,因为您可能知道字符串的长度和字符串的数量。)

*运算符取消引用cutline[25]处的内容,因此需要指针。我很确定那不是你想要的。如果您使用上述建议,cutline[n]将为您提供所需的指针。

说完这一切之后,我认为c不是最简单的语言,可以快速将一些东西放在一起来处理这样的字符串(而c是我付出的代价)。我更喜欢脚本语言,也许是python(或perl或tcl或ruby,无论你最熟悉的是什么)。事实上,bash shell脚本也可能更好。使用脚本语言,您根本不需要担心指针和解引用以及分配等。在c中执行此操作的唯一原因是性能,即您的输入文件非常庞大。