【发布时间】:2017-11-23 21:27:53
【问题描述】:
在下面的代码中,我得到了意想不到的结果。在第一次迭代期间,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;
}
【问题讨论】:
-
等等...
n是什么? -
程序应该做什么?
-
@Aconcagua 添加到我的评论中,对未普遍同意的事情提出反驳是一件好事。我只是认为这与 C 思维方式 与 C++ 思维方式 有关。为了支持这一点,请考虑指针转换在 C++ 中很常见(因为继承),但通常是 C 中未定义行为的标志(您应该在此处使用具有公共初始序列的结构联合)。一个好的 C 程序通常不会在指针类型之间进行一次强制转换。
-
@Aconcagua 我非常了解 C++ 强制转换运算符,我认为它们在某种程度上支持我的上述论点?经典的套接字 API 是一团糟,实际上是糟糕的 C 代码示例。