虽然我使用的是C ++,但作为一项要求,我需要使用const char *数组而不是字符串或char数组。由于我是新手,我需要学习如何使用const char *。我已将const char *数组声明为const char* str[5]
。在程序的稍后阶段,我需要使用值填充5个元素中的每个元素。
但是,如果我尝试分配这样的值:
const char* str[5];
char value[5];
value[0] = "hello";
str[0] = value[0];
它不会编译。将char数组添加到char到const char *数组然后打印数组的正确方法是什么?任何帮助,将不胜感激。感谢。
答案 0 :(得分:6)
字符串"hello"
由6个字符组成,而不是5个字符。
{'h', 'e', 'l', 'l', 'o', '\0'}
如果您在声明value
时指定了字符串,那么您的代码可能与您目前的代码类似:
char value[6] = "hello";
如果您想分两行进行,则应使用strncpy()
。
char value[6];
strncpy(value, "hello", sizeof(value));
在名为value
的字符串列表中放置指向str
的指针:
const char * str[5];
char value[6] = "hello";
str[0] = value;
请注意,这会使str[1]
通过str[4]
留下未指定的值。
答案 1 :(得分:1)
在程序中稍后填充const char* str[5]
的各种方法。
int main(void) {
const char* str[5];
str[0] = "He" "llo"; // He llo are string literals that concat into 1
char Planet[] = "Earth";
str[1] = Planet; // OK to assign a char * to const char *, but not visa-versa
const char Greet[] = "How";
str[2] = Greet;
char buf[4];
buf[0] = 'R'; // For a character array to qualify as a string, need a null character.
buf[1] = 0; // '\0' same _value_ as 0
str[3] = buf; // array buf converts to address of first element: char *
str[4] = NULL; // Do not want to print this.
for (int i = 0; str[i]; i++)
puts(str[i]);
return 0;
}
Hello
Earth
How
R
答案 2 :(得分:0)
value[0] = "hello";
这怎么能保持"你好"。它只能容纳一个字符。
此外value[5]
还不够。 '\0'
没有空间,程序将展示 UB 。
因此要么使用value[6]
-
char value[6];
strncpy(value,"hello",sizeof value);
或者像这样声明 -
char value[]="hello";
然后只需使指针指向此数组。像这样的东西 -
str[0]=value;