Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
strncmp()给出了一个假阳性_C_Getline_Strncmp - Fatal编程技术网

strncmp()给出了一个假阳性

strncmp()给出了一个假阳性,c,getline,strncmp,C,Getline,Strncmp,我已经过期了一个关于strncmp和getline的问题。。。所以我做了一个小测试应用。strncmp给出了误报,我不知道我做错了什么 这是节目 #include <stdio.h> FILE *fp=NULL; char uname[4]="test"; char *confline=NULL; size_t conflinelength=0; int datlength; main() { datlength=4; fp=fopen("test.txt","r

我已经过期了一个关于strncmp和getline的问题。。。所以我做了一个小测试应用。strncmp给出了误报,我不知道我做错了什么

这是节目

#include <stdio.h>

FILE *fp=NULL;
char uname[4]="test";
char *confline=NULL;
size_t conflinelength=0;
int datlength;

main()
{
    datlength=4;
    fp=fopen("test.txt","r+");
    while (getline(&confline,&conflinelength,fp)!=-1)
    {
        if (strncmp(confline,uname,(datlength-1))==0);
        {
            printf("match\n");
            return;
        }
    }
    printf("no match\n");
    fclose(fp);
}
以及程序输出

match
相当于

if (strncmp(confline,uname,(datlength-1))==0)
    ;
printf("match\n");

您需要删除
if
行的末尾开始

如果您本想使用
char uname[5]=“test”此行将自动附加“\0”,使其成为C字符串,但由于只分配了4个空格,因此无法添加。相反,它是一个未终止的字符数组

if (strncmp(confline,uname,(datlength-1))==0);
                                             ^ roh-roh
charuname[4]=“测试”导致一组未终止的字符,即不是C字符串。i、 e.“t | e | s | t |”
这将进行编译,但某些字符串函数(strcmp、strlen等)无法对其进行处理,从而导致运行时错误


建议
charuname[]=“测试”这将自动处理追加空终止符的操作,生成一个C字符串:“|t | e | s | t |\0 |”。此方法是初始化字符数组的首选方法。

我猜是您输入分号时的打字错误;在if条件的末尾,而不是其语句,即在曲线括号}之后


出于兴趣,我更喜欢使用fgets,因为getline不在标准的C库中可以作为
datlength=4
,但建议
char uname[]=“test”。也
printf(“匹配”)后面应紧跟
fclose(fp)。您是指(strncmp(confline,uname,(datlength-1))=0)时的行吗?
if (strncmp(confline,uname,(datlength-1))==0)
    ;
printf("match\n");
if (strncmp(confline,uname,(datlength-1))==0);
                                             ^ roh-roh