我在处理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包含来自输入文件的整行是正确的,但是当我尝试将该行的第二部分复制到其自己的数组中时,我得到了错误
答案 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中执行此操作的唯一原因是性能,即您的输入文件非常庞大。