我最近开始用C语言编写代码,我对它有很多乐趣。 但我遇到了一个小问题,我已经尝试了所有我能想到的解决方案,但没有成功。如何将char *变量分配给数组?
实施例
int main()
{
char* sentence = "Hello World";
//sentence gets altered...
char words[] = sentence;
//code logic here...
return 0;
}
这当然给了我一个错误。非常感谢。
答案 0 :(得分:2)
您需要为数组words
提供长度
char words[100]; // For example
使用strncpy复制内容
strncpy(words, sentence, 100);
如果字符串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;
}