使用=运算符时,获取字符串数组的意外结果

时间:2017-06-21 06:22:54

标签: 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 < 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;
}

1 个答案:

答案 0 :(得分:3)

if (strcmp(final[end], ""))
如果strcmp与空字符串相等,则

0会返回final[end] 0条件中的if表示false,因此不会执行if-block。我相信你想要它被执行。所以你应该做

if (strcmp(final[end], "") == 0)

同样适用于else if声明。