我想知道是否可以用空字符串初始化字符串,如下所示:
#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 将单词与“”进行比较吗?
嗯,这是可能的,但它不会按照您期望的方式运行。在最新版本的 C 中,这是未定义的行为。
您所做的是分配内存,然后丢弃该指针,从而泄漏该内存。您将指针替换为指向字符串文字的非常量指针(这应该使编译器发出警告或错误)。
这恰好适用于你的情况。幸运的是,您没有尝试写入该内存。如果你这样做了,很可能会发生不好的事情。