C 编程:字符串数组 - 如何检查相等性?
C Programming: String arrays - how to check equality?
我有这样的结构:
struct car{
char parts[4][10];
};
我在我的 main() 函数中初始化它们,就像:
char fill[10] = "none";
struct car c;
int i = 0;
for (i; i< 4; i++){
memcpy(c.parts[i], fill, 10);
}
此时数组中的每个字符串都有"none",像这样:
int j = 0;
for (j; j<4; j++){
printf("%s\n", c.parts[j]);
}
*OUTPUT*
none
none
none
none
这是正确的 - 这就是我想要的。但是,现在我想编写一个函数并将一个指针传递给 c。在函数内部,我想:
- 检查 "parts" 数组中的元素是否等于 "none"。
- 如果是,则将其设置为等于 "wheel"。
我是这样尝试的:
void fun(struct car* c){
char fill[10] = "wheel";
int i = 0;
for (i; i<4; i++){
if (c->parts[i] == "none"){
memcpy(c->parts[i], fill, 10);
}
}
}
int main(){
char fill[10] = "none";
struct car c;
int i = 0;
for (i; i< 4; i++){
memcpy(c.parts[i], fill, 10);
}
struct car* c2 = c;
fun(c2);
return 0;
}
但是,函数中的 if 语句永远不会被命中!它一直在说数组中的每个元素都不等于 "none"。但是,我尝试在 if 语句的正上方将其打印出来——果然,它显示 "none"!不知道为什么?
编辑
我尝试了 "possible duplicate" post (strcmp) 中建议的方法,但无济于事。我仍然没有得到我想要达到的目标。
使用 <string.h>
中的 strcmp()
在 fun()
中进行比较,如下所示:
void fun(struct car* c){
char fill[10] = "wheel";
int i = 0;
for (i; i<4; i++){
if (!strcmp(c->parts[i], "none")) {
memcpy(c->parts[i], fill, 10);
}
}
}
我有这样的结构:
struct car{
char parts[4][10];
};
我在我的 main() 函数中初始化它们,就像:
char fill[10] = "none";
struct car c;
int i = 0;
for (i; i< 4; i++){
memcpy(c.parts[i], fill, 10);
}
此时数组中的每个字符串都有"none",像这样:
int j = 0;
for (j; j<4; j++){
printf("%s\n", c.parts[j]);
}
*OUTPUT*
none
none
none
none
这是正确的 - 这就是我想要的。但是,现在我想编写一个函数并将一个指针传递给 c。在函数内部,我想:
- 检查 "parts" 数组中的元素是否等于 "none"。
- 如果是,则将其设置为等于 "wheel"。
我是这样尝试的:
void fun(struct car* c){
char fill[10] = "wheel";
int i = 0;
for (i; i<4; i++){
if (c->parts[i] == "none"){
memcpy(c->parts[i], fill, 10);
}
}
}
int main(){
char fill[10] = "none";
struct car c;
int i = 0;
for (i; i< 4; i++){
memcpy(c.parts[i], fill, 10);
}
struct car* c2 = c;
fun(c2);
return 0;
}
但是,函数中的 if 语句永远不会被命中!它一直在说数组中的每个元素都不等于 "none"。但是,我尝试在 if 语句的正上方将其打印出来——果然,它显示 "none"!不知道为什么?
编辑 我尝试了 "possible duplicate" post (strcmp) 中建议的方法,但无济于事。我仍然没有得到我想要达到的目标。
使用 <string.h>
中的 strcmp()
在 fun()
中进行比较,如下所示:
void fun(struct car* c){
char fill[10] = "wheel";
int i = 0;
for (i; i<4; i++){
if (!strcmp(c->parts[i], "none")) {
memcpy(c->parts[i], fill, 10);
}
}
}