【发布时间】:2020-04-29 12:21:52
【问题描述】:
我正在为一个 uni 项目编程。目前,我的消费者线程有一个功能,但问题现在不存在。问题是,我不想检查内容的相等性(arg->lineF1 和 arg->lineF2),我想遍历它们的每一行(假设 arg->lineF1 和 arg->lineF2 是字符数组) 并检查他们的每一行是否相等,我尝试了一些事情,但到目前为止它们还没有工作。
我必须说明我发现的这些问题的解决方案不起作用(尝试 strtok 失败,尝试循环但我没有得到空行)。
void * fonctionConsummer(void * args){
struct argumentThreadConsummer *arg = (struct argumentThreadConsummer *)args;
//-----------------LINE BY LINE CHECKING------------------------------------
void * fonctionConsummer(void * args){
struct argumentThreadConsummer *arg = (struct argumentThreadConsummer *)args;
//-----------------LINE BY LINE CHECKING------------------------------------
int counter = 0;
const char s[2] = "\n";
char *lineF1;
char *lineF2;
lineF1 = strtok(arg->lineF1,s);
lineF2 = strtok(arg->lineF2,s);
while(lineF1 != NULL || lineF2 != NULL){
printf("%d ", counter);
printf("Line F1 %s\n" , lineF1); // Add the new line character here since it is removed from the lineF1ization process
printf("Line F2 %s\n" , lineF2); // Add the new line character here since it is removed from the lineF1ization process
counter++;
lineF1 = strtok(NULL, s);
lineF2 = strtok(NULL, s);
}
//---------------------------------------------------------------------------
if(strcmp (arg->lineF1, arg->lineF2) == 0){
printf("\nLes fichiers ont le meme contenu\n");
pthread_exit(0);
}
printf("\nLes fichiers n'ont pas le meme contenu\n");
pthread_exit(0);
}
两个文件的内容:
输出是:
我不明白为什么我从 F2 得到 null(在第二次迭代中)
提前感谢您的帮助,我是 C 编程的初学者。
【问题讨论】:
-
您对
strtok()进行了哪些尝试,但没有成功?这正是您的问题的解决方案。显示该代码。 -
该错误也可能来自您阅读文件的方式。请出示minimal reproducible example。您的代码不完整,将其减少到最小可能重现您面临的问题(例如,您可能甚至不需要线程来重现问题)。
-
建议删除行:
//-----------------LINE BY LINE CHECKING------------------------------------ void * fonctionConsummer(void * args){ struct argumentThreadConsummer *arg = (struct argumentThreadConsummer *)args; -
关于:
if(strcmp (arg->lineF1, arg->lineF2) == 0){由于对strtok()的调用将 '\n' 替换为 NUL 字节,并且strcmp()在遇到的第一个 NUL 字节处停止,因此结果仅将比较每行的第一部分,而不是整个数组 -
请不要张贴图片,而是复制/粘贴实际文字
标签: c char string-comparison c-strings strcmp