C 使用=运算符时获取字符串数组的意外结果
在下面的代码中,我得到了意想不到的结果。在第一次迭代中,s[0]被打印为第一个元素。但是在剩余的迭代中,0将被打印。使用=运算符而不是strcpy是否错误?我尝试使用strcpy,但它导致了分段错误。为什么打印错误的值C 使用=运算符时获取字符串数组的意外结果,c,arrays,string,strcpy,C,Arrays,String,Strcpy,在下面的代码中,我得到了意想不到的结果。在第一次迭代中,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 <
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;
}
intmain(){
int n,i;
scanf(“%d”和“&n”);
int c,j;
字符*s[n];
char*ch=(char*)malloc(100);
对于(i=0;i
strcmp
返回0
iffinal[end]
与空字符串的比较相等。if
条件中的0
表示false
,因此不执行if块。我相信你想要执行它。所以你应该这么做
if (strcmp(final[end], "") == 0)
这同样适用于
else if
语句。等等,n
是什么?程序应该做什么?@Aconcagua补充到我的评论中,对一些没有得到普遍认可的东西提出反论点是一件好事。我只是认为这与C思维方式和C++思维方式有关。为了支持这一点,考虑指针的类型在C++中是常见的(因为继承),但是在C中通常是一个未定义行为的标志(这里应该使用具有一个共同的初始序列的结构的结合)。一个好的C程序通常在指针类型之间没有一个单一的转换。@阿空加瓜山,我非常了解C++的CAST操作符,我想它们有点支持我上面的论点。顺便说一句,经典的套接字API非常混乱,实际上是坏C代码的一个例子。你的意思是==0
…是的,的确如此。谢谢你纠正我的大脑扭曲。哦,天哪。。那太傻了。。谢谢
if (strcmp(final[end], "") == 0)