用空字符串初始化字符串

PCR*_*PCR 1 c string strcmp

我想知道是否可以用空字符串初始化字符串,如下所示:

#include <stdio.h>
#include <string.h>

char* some_function() {
    char* w = malloc(100*sizeof(char));
    w = "";
    if (1 == 2) {
        w = "Not empty anymore";
    }
    return w;
}

int main(void) {

    char* word = some_function();
    int r = strcmp("", word);

    printf("%s\n", word);
    printf("%d\n", r);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它编译得很好,并给出了我想要的结果,但是我对 C 仍然很陌生,想知道这是否会导致任何问题。我还可以使用 strcmp 将单词与“”进行比较吗?

pad*_*ddy 5

嗯,这是可能的,但它不会按照您期望的方式运行。在最新版本的 C 中,这是未定义的行为

您所做的是分配内存,然后丢弃该指针,从而泄漏该内存。您将指针替换为指向字符串文字的非常量指针(这应该使编译器发出警告或错误)。

这恰好适用于你的情况。幸运的是,您没有尝试写入该内存。如果你这样做了,很可能会发生不好的事情。