如何将char *分配给Array变量

时间:2016-06-12 09:16:43

标签: c arrays pointers

我最近开始用C语言编写代码,我对它有很多乐趣。 但我遇到了一个小问题,我已经尝试了所有我能想到的解决方案,但没有成功。如何将char *变量分配给数组?

实施例

int main()
{
    char* sentence = "Hello World";

    //sentence gets altered...

    char words[] = sentence;

    //code logic here...

    return 0;
}

这当然给了我一个错误。非常感谢。

7 个答案:

答案 0 :(得分:2)

  1. 您需要为数组words提供长度

    char words[100]; // For example
    
  2. 使用strncpy复制内容

     strncpy(words, sentence, 100);
    
  3. 如果字符串sentence太长

    ,请添加空字符
     words[99] = 0;
    

答案 1 :(得分:1)

打开上的所有编译器警告并信任它的内容。您的数组初始值设定项必须是字符串文字或初始化列表。因此,它需要显式大小或初始化程序。即使你已经明确地初始化它,仍然不会以你写的方式分配。

 words = sentence;

请使用C标准中的引文咨询this SO post

截至:

  

如何将char *分配给Array变量?

您可以通过使用char *指向的字符串文字的内容填充“数组变量”来完成此操作,但是您必须给它一个通过复制之前可以显式确定长度。不要忘记#include <string.h>

char* sentence = "Hello World";
char words[32];                //explicit length
strcpy (words, sentence);
printf ("%s\n", words);

或者以这种方式:

char* sentence = "Hello World";
char words[32];
size_t len = strlen(sentence) + 1;
strncpy (words, sentence, (len < 32 ? len : 31));
if (len >= 32) words[31] = '\0';
printf ("%s\n", words);

顺便说一句,您的main()应该返回int

答案 2 :(得分:0)

我认为你可以用strcpy

来做到这一点
#include <memory.h>
#include <stdio.h>
int main()
{
    char* sentence = "Hello World";
    char words[12];
    //sentence gets altered...
    strcpy(words, sentence);
    //code logic here...
    printf("%s", words);
    return 0;
}

..如果我没有误会。上面的代码将字符串复制到char数组中。

答案 3 :(得分:0)

  

如何将char *指定给Array变量?

以下代码在某些情况下可能有用,因为它不需要复制字符串或知道其长度。

char* sentence0  = "Hello World";
char* sentence1  = "Hello Tom!";

char *words[10]; // char *words[10] array can hold char * pointers to 10 strings

words[0] = sentence0;
words[1] = sentence1;

printf("sentence0= %s\n",words[0]);
printf("sentence1= %s\n",words[1]);

输出

sentence0= Hello World
sentence1= Hello Tom!

答案 4 :(得分:0)

声明

char* sentence = "Hello World";

将指针sentence设置为指向存储字符序列“Hello World \ 0”的只读存储器。

words是一个数组,而不是一个指针,你不能把数组“指向”任何地方,因为它是一个 固定地址在内存中,你只能复制东西。

char words[] = sentence; // error

而是声明一个具有大小的数组,然后将sentence指向的内容复制到

char* sentence = "Hello World";
char words[32];
strcpy_s(words, sizeof(word), sentence); // C11 or use strcpy/strncpy instead

字符串现在重复,sentence仍然指向原始的“Hello World \ 0”和words 数组包含该字符串的副本。可以修改数组的内容。

答案 5 :(得分:0)

在其他答案中,我将尝试解释没有定义大小的数组背后的逻辑。它们的介绍只是为了方便(如果编译器可以计算元素的数量 - 它可以为你做)。创建没有大小的数组是不可能的。

在您的示例中,您尝试使用指针(char *)作为数组初始化器。这是不可能的,因为编译器不知道指针后面的元素数量,并且可以真正初始化数组。

逻辑背后的标准陈述是:

  

6.7.8初始化

     

...

     

22如果初始化未知大小的数组,则确定其大小   由具有显式初始化器的最大索引元素。在   在其初始化列表的末尾,该数组不再具有不完整的类型。

答案 6 :(得分:-1)

我想你想要做以下事情:

#include <stdio.h>
#include <string.h>

int main()
{
char* sentence = "Hello World";

//sentence gets altered...

char *words = sentence;
printf("%s",words);

//code logic here...

return 0;

}