你的代码有几个错误。首先用分号结尾的if
或for
结构是在C中启动时常见的错误。基本上它会创建一个空的if
语句,后面跟着一个代码块。看看这样说:
if (condition)
; // Does nothing. The if is empty
// Totally unrelated block of code.
{
}
代码块通常是创建范围,所以虽然它似乎没有用编译器以这种方式解读块有用的,但实际上并非如此。这也发生在其他情况下,如while
,for
,等等:
for (int i=0 ; i<n ; ++i)
; // Empty for. Runs `n` loops, but doing nothing
// Unrelated block of code. Runs only once
{
}
的比较操作也是错误的,你应该使用==
的比较,而不是=
,其中用于分配。
最后,你不能以这种方式比较字符串。字符串基本上是数组,而数组又是用指针表示的。如果您比较两个指针(ptr1 == ptr2
),它只会检查两个字符串是否指向内存中的相同地址。由于字符串由几个字符组成,因此必须迭代才能正确比较。幸运的是,标准库已经为此提供了一种方法。
修正了一个或两个错字,这是你会得到什么:
char *names[50][32];
char *states[50][2];
i = 0; // Assuming this is declared somewhere else
while (i < b) {
if (strcmp(states[i], "tx") == 0) {
printf("a string %s\n", names[i]);
}
i = i + 1;
}
你或许应该同时检查文档为strcmp。
编辑:因为这已经是公认的答案,所以我还应该包含一个修正,如@dbush所述。统计数组显然缺少额外字符串终止符的空间,因为字符串是以C终止的NULL
。名称数组可能会也可能不会遇到同一问题,但尚不清楚。无论如何,值得注意的是,两者都应该包含一个额外的字节来存储终止符:
char names[50][33];
char states[50][3];
支持@dbush。
提示:什么是',''中如果(状态[i] = “TX”); {'怎么办? –
此代码不能编译。没有声明'状态'。 –
另外'='运算符是赋值而不是比较 –