当前位置:  开发笔记 > 编程语言 > 正文

将字符串分配给字符数组

如何解决《将字符串分配给字符数组》经验,为你挑选了3个好方法。

我对以下内容感到有些惊讶.

例1:

char s[100] = "abcd"; // declare and initialize - WORKS

例2:

char s[100]; // declare
s = "hello"; // initalize - DOESN'T WORK ('lvalue required' error)

我想知道为什么第二种方法不起作用.它应该是自然的(它适用于其他数据类型)?有人能解释一下这背后的逻辑吗?



1> shoosh..:

初始化数组时,C允许您使用值填充它.所以

char s[100] = "abcd";

基本上是一样的

int s[3] = { 1, 2, 3 };

但它不允许你进行赋值,因为它s是一个数组而不是一个自由指针.的含义

s = "abcd" 

是分配的指针值abcds,但你不能改变s,因为再没有什么将指向数组.
如果schar*- 一个可以指向任何东西的指针,这可以而且确实有效.

如果要复制字符串简单使用strcpy.


很好的答案,除非你不应再使用简单的strcpy.使用strncpy或strlcpy.
此外,s应该是const char*,而不是char*.

2> dwc..:

C中没有"字符串"这样的东西.字符串是char的数组,char按惯例终止.由于无法在C中分配数组,因此也无法分配字符串.文字"你好"是语法糖\0

正确的方法是:

char s[100];
strncpy(s, "hello", 100);

或者更好的是:

#define STRMAX 100
char    s[STRMAX];
size_t  len;
len = strncpy(s, "hello", STRMAX);


不是推荐的方法.谨防strncpy的奇怪之处:http://stackoverflow.com/a/1258577/2974922

3> Sparr..:

初始化和赋值是两个不同的操作,碰巧在这里使用相同的运算符("=").

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有