1

我在处理 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 包含来自输​​入文件的整行是正确的,但是当我尝试将行的第二部分复制到它自己的数组中时,我得到了错误

4

2 回答 2

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 ++;

}
于 2013-09-19T15:06:29.153 回答
0

这里有几件事。

char cut2line[BUFSIZ];

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

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

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

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

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

说了这么多,我认为 c 并不是最简单的语言,可以快速地将一些东西放在一起来处理这样的字符串(而 c 是我用来编程的东西)。我更喜欢脚本语言,也许是 python(或者 perl 或 tcl 或 ruby​​,无论你最喜欢什么)。事实上,一个 bash shell 脚本也可能会更好。使用脚本语言,您根本不需要担心指针、取消引用和分配等。在 c 中这样做的唯一原因是性能,即您的输入文件非常庞大。

于 2013-09-19T15:18:55.683 回答