gpt4 book ai didi

c - C语言输出字符串的三元运算

转载 作者:太空狗 更新时间:2023-10-29 14:53:26 26 4
gpt4 key购买 nike

谁能解释为什么这个简单的三元运算甚至不能在 C 中编译?

void main(int argc, char *argv[]){
int a = atoi(argv[1]);
char foo[] = (a == 1) ? "bar1" : "bar2";
}

这似乎是字符串的问题。

最佳答案

字符串文字 "bar"在表达式中使用时(在本例中,在三元运算符中)是指向预分配内存的指针。您不能使用指向数据的指针来初始化数组,只能使用文字("..."{...})。

相反,您可以将其分配给 char *:

const char *foo = (a == 1) ? "bar1" : "bar2";

这将复制文字但指向它,因此您不应修改foo 的元素。如果你需要一个副本,你可以使用memcpy,前提是你知道声明数组有多大:

char foo[5];
memcpy(foo, (a == 1) ? "bar1" : "bar2", sizeof foo);

如果您特别希望能够分配 内容,那么有一个技巧可以做到这一点;可以使用赋值(以及从函数返回它等)隐式复制 struct 的内容,无论 struct 是什么 包含,您可以将字符数组放在 struct 中:

typedef struct { 
char contents[5];
} mystring;

mystring foo = (a == 1) ? (mystring){"bar1"} : (mystring){"bar2"};
// You can also use assignments.
foo = (mystring){"baz"};

就像第二个选项一样,当您执行此操作时,您必须在 struct 声明中为数组选择一个固定大小。如果您有无限长度的字符串,那么您必须使用指针。

关于c - C语言输出字符串的三元运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12694202/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com