【发布时间】:2018-01-23 19:34:25
【问题描述】:
我有一个这样的文本文件
"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
我正在循环阅读(这是部分代码)
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;
}
但我观察到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
我也尝试与\0 进行比较,但结果没有改变。请指出我哪里出错了。
附: : 我正在使用 Ubuntu 16.04 64 位机器和 gcc 5.2.1。
【问题讨论】:
-
line[0] != "\n"-->line[0] != '\n' -
您将
char与字符串文字进行比较,您应该打开编译器警告。gcc-pedantic -Werror -
@BLUEPIXY 感谢您指出。完全忽略了那个错字。
-
我把它作为'字符串比较'的副本关闭了,但它也可以看作是字符比较。条件
if (line[0] != "\n") {将char与char *进行比较。它可以通过使用if (strcmp(line, "\n") != 0)或if (line[0] != '\n')来修复——两者都在这种情况下工作。对于一般字符串比较(较长的字符串),请使用strcmp()。