如何使用C中的char指针初始化char数组

时间:2013-08-24 01:08:11

标签: c arrays string pointers char

假设我有一个名为string1的char指针指向单词“hahahaha”中的第一个字符。我想创建一个char [],其中包含string1指向的相同字符串。

为什么这不起作用?

char string2[] = string1;

7 个答案:

答案 0 :(得分:3)

  

“为什么这不起作用?”

因为那不是C语言的定义方式。

您可以使用strdup()创建副本[请注意strdup()不是ANSI C]

参考文献:

答案 1 :(得分:1)

在C中你可以这样做:

char string1[] = "hahahaha";
char string2[sizeof(string1)+1];
strcpy( string2, string1 );

string1定义为具有常量初始化程序的上述(数组)时,编译器在编译时知道其长度,sizeof将返回它的长度,包括空终止符(即大小)数据)。

答案 2 :(得分:0)

1)指针string2 ==指针string1

任何一个值的变化都会改变另一个

来自海报poida

char string1[] = "hahahahaha";
char* string2 = string1;

2)制作副本

char string1[] = "hahahahaha";
char string2[11]; /* allocate sufficient memory plus null character */
strcpy(string2, string1);

其中一个的价值变化不会改变另一个

答案 3 :(得分:0)

C 中,您必须保留记忆以保存字符串 这在定义常量字符串时自动完成,然后分配给char []。

另一方面,当你写string2 = string1时,
你实际在做的是分配指向char 对象的内存地址。如果string2声明为char*(指向char的指针),那么赋值是有效的:

char* string2 = "Hello.";

变量string2现在保存char“Hello”的constanta数组的第一个字符的地址。

string2char*string1char[]时,写下string2 = string1也没关系。

但是,假设char[]在内存中具有常量地址。不可修改。
所以,不允许写这样的句子:

 char string2[];
 string2 = (something...);

但是,您可以修改string2的各个字符,因为它是一个字符数组:

 string2[0] = 'x'; /* That's ok! */

答案 4 :(得分:0)

如果你想初始化2个char数组,那么唯一的方法就是为它们分配第一个字符串或副本。

#define HAHA "hahahahaha"
char string1[] = HAHA;
char string2[] = HAHA;

答案 5 :(得分:0)

你写的是这样的:

char str[] =  "hello";

......实际上变成了这个:

char str[] =  {'h', 'e', 'l', 'l', 'o'};

这里我们隐含地调用了一个叫做初始值设定项的东西 在上面的场景中,初始化程序负责制作字符数组 初始化程序在场景后面执行此操作:

char str[5];

str[0] = 'h';
str[1] = 'e';
str[2] = 'l';
str[3] = 'l';
str[4] = 'o';

C是一种非常低级的语言。你的陈述:

char str[] = another_str;

对C没有意义 无法整个数组分配给C中的另一个数组。您必须手动或使用strcpy()函数逐字复制。 在上面的语句中,初始值设定项不知道another_str数组变量的长度。如果您对字符串进行硬编码而不是放置another_str,那么它将起作用。

其他一些语言可能会允许这样做......但是你不能指望手动车自动换档。你负责它。

答案 6 :(得分:-1)

您可以使用如下指针将string1的地址分配给string2:

#include <stdio.h>

int main(int argc, char** argv) {
    char* string1 = "hahahahaha";
    char* string2 = string1;

    printf("%s\n", string2);
}