gpt4 book ai didi

c - 在 C 中创建字符串的方法有什么区别?

转载 作者:行者123 更新时间:2023-12-04 09:10:23 25 4
gpt4 key购买 nike

C语言中字符串变量的这两种形式有什么区别?

char *string1;
char string2[];

还有其他方法吗?

非常感谢。

最佳答案

char *string1 = "foo";

string1是一个指向字符串字面量的指针(为了论证,它指向存储在程序只读数据段中的一系列字符)。

char string2[] = "foo";

string2 是一个包含 4 个字符的数组。它使用字节“f”、“o”、“o”、ASCII_NUL 进行初始化。

可能最显着的区别是,如果您执行 string1[0] = 'b';,您会得到未定义的行为,因为您正试图将存储的表示形式修改为字符串文字。如果您执行 string2[0] = 'b';,那么您将个人字符串修改为“boo”,这很好。

通常,char* 类型的变量是指向 char 的指针。它通常用于指向以 NUL 结尾的字符序列中的第一个字符,在这种情况下它指向一个字符串。 char[] 类型的变量是一个字符数组。如果它有一个 NUL 终止符,那么它实际上是一个字符串。

这个问题被两个事实稍微混淆了:

1) 在 C 中,无论何时在采用指针的上下文中使用数组变量名称,它“意味着”指向数组第一个元素的指针。因此数组和指针通常被认为是可以互换的。

2) 在 C 中,char[] 类型的函数参数实际上不是数组。它只是一个指针,与char*完全一样。因此,数组和指针通常被认为是可以互换的。

那么,指针和数组的另一个区别:

string1 = "bar"; // changes string1 to point to another string literal.

string1 = string2; // changes string1 to point to the first character of string2.

string2 = string1; // doesn't compile - you can't assign to an array,
// only initialize it and then modify element-by-element.

[注意:问题中的声明 char string2[]; 在函数中不是有效的 C 语法,但我使用的定义在函数或文件范围内都是有效的, 在任何功能之外。无论哪种方式,它们的行为都与我描述的初始化和赋值一样,但它们的生命周期不同。]

关于c - 在 C 中创建字符串的方法有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1449480/

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