在下面的代码中,我得到了意想不到的结果。在第一次迭代期间,s [0]被打印为第一个元素。但在剩余的迭代期间,0正在打印。使用=运算符而不是strcpy是错误的吗?我尝试使用strcpy但它会导致分段错误。为什么打印出错误的价值?
int main() {
int n, i;
scanf("%d", &n);
int c, j;
char* s[n];
char* ch = (char*)malloc(100);
for (i = 0; i < n; i++) {
scanf("%s", ch);
s[i] = strdup(ch);
}
char* final[n];
int count[n];
for (i = 0; i < n; i++) {
final[i] = "";
count[i] = 0;
}
int end;
for (i = 0; i < n; i++) {
end = 0;
while (1) {
printf("%s\n", s[0]);
if (strcmp(final[end], "")) {
count[end]++;
final[end] = s[i];
// printf("%s\n",final[end]);
end++;
break;
}
else if (strcmp(final[end], s[i])) {
final[end] = s[i];
sprintf(final[end], "%d", count[end]);
count[end]++;
end++;
break;
}
end++;
}
}
for (i = 0; i < n; i++) {
// printf("%s\n",final[i]);
}
return 1;
}
答案 0 :(得分:3)
if (strcmp(final[end], ""))
如果strcmp
与空字符串相等,则 0
会返回final[end]
0
条件中的if
表示false
,因此不会执行if-block。我相信你想要它被执行。所以你应该做
if (strcmp(final[end], "") == 0)
同样适用于else if
声明。