fgets上的循环退出条件不起作用

Har*_*han 2 c string loops fgets

我有这样的文本文件

"input"
height : 227
width : 227
depth : 3

"conv"
num_output : 96
pad : 0
kernel_size : 11
stride : 4
group : 1

"relu"

"pool"
kernel_size : 3
stride : 2
Run Code Online (Sandbox Code Playgroud)

我在循环中读它(这是部分代码)

char line[100];

while ((fgets(line, sizeof(line), filePtr))) {
    if (line[0] != "\n") {
        sscanf(line, "%15s : %15s", tmpstr1, tmpstr2);
        printf("%s\n",  tmpstr2);
        printf("line = %s", line);
    } else
        break;
}
Run Code Online (Sandbox Code Playgroud)

但我观察到if条件总是成立,输出如下

"input"
227
line = height : 227
227
line = width : 227
3
line = depth : 3
3
line = 
3
line = "conv"
96
line = num_output : 96
0
line = pad : 0
11
line = kernel_size : 11
4
line = stride : 4
1
line = group : 1
1
line = 
1
line = "relu"
1
line = 
1
line = "pool"
3
line = kernel_size : 3
2
line = stride : 2
Run Code Online (Sandbox Code Playgroud)

我也尝试过比较\0但结果不会改变.请指出我哪里出错了.

PS:我正在使用Ubuntu 16.04 64位机器和gcc 5.2.1.

gsa*_*ras 5

换行符是一个字符,而不是字符串,所以改变这个:

line[0] != "\n"
Run Code Online (Sandbox Code Playgroud)

对此:

line[0] != '\n'
Run Code Online (Sandbox Code Playgroud)

启用编译器警告(-WallGCC中的标志),您应该看到如下内容:

warning: comparison between pointer and integer
warning: comparison with string literal results in unspecified behavior [-Waddress]
Run Code Online (Sandbox Code Playgroud)