c - 在 C 中创建字符串的不同方法

标签 c arrays string pointers char

我正在寻找了解创建字符串的每种方法的优缺点,有人可以帮助我吗?

char x[] = {'a', 'b', 'c', '\0'};

char x[]="abc";

char *p;
p="abc";

我忘记了其他方法吗?谢谢。

最佳答案

char x[]={{'a'},{'b'},{'c'},{'\0}};

除了 '\0 后面缺少撇号之外,通常应为 char x[] = {'a', 'b', 'c', '\0' };。 C 语法允许使用单个标量初始值设定项使用额外的大括号,但编译器通常会对此发出警告,因为它表示错误 - 大括号通常用于指示聚合对象(例如数组或结构)的组成。

固定撇号后,这将 x 定义为一个由四个字符组成的数组,分别是 a、b、c 和空字符。这种格式很乏味,因此实际上没有人以这种方式定义数组,除非有一些特殊情况,例如需要使用表达式定义其中一个字符,或者可能为了某些目的而定义数组而不是用作字符串我们想强调这一点。

char x[]="abc";

这将 x 定义为与上面相同的四个字符。这是定义字符数组的常用方法。

这两种初始化方法在C语义上没有区别;两者都定义相同的数组,因此在它们之间进行选择的唯一原因是人类如何与它们交互 - 这更容易阅读,更容易编辑而不出错,等等。

char *p;
p="abc";

这是一个定义和一个赋值。最好写成 char *p = "abc"; 除非有理由不这样做。

这将 p 定义为指向与上面相同的四个字符的静态数组的指针。仅使用它来定义数组并不常见,因为它创建了一个不必要的指针 p。它通常仅在需要一个最初指向静态数组但稍后可能会更改的指针时使用。

关于c - 在 C 中创建字符串的不同方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59579067/

相关文章:

代码在我的系统上运行良好,但当我将其提交给应该检查它的机器人时,会导致堆栈崩溃错误

java - Java 的 String.intern() 的目的是什么?

javascript - 如何将文件内容解释为模板字符串?

javascript - 如何在每次循环迭代中一个一个地移动数组的 3 个元素?

java - 关于使用字符串数组形式的值查询 Java Map。

java - 数组 toString 以及也具有 toString 方法的对象

c - C 中的 Trim 函数,用于原地修剪(不返回字符串)

无法通过 system() 从程序中设置 "echo"文件

c - 如何替换文件中的一行?

c - ulimit(UL_GDESLIM, 0) 和 select 如何工作?