如何为const char *数组赋值并打印到屏幕

时间:2015-09-04 02:56:06

标签: c arrays string char

虽然我使用的是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 *数组然后打印数组的正确方法是什么?任何帮助,将不胜感激。感谢。

3 个答案:

答案 0 :(得分:6)

  1. 字符串"hello"由6个字符组成,而不是5个字符。

    {'h', 'e', 'l', 'l', 'o', '\0'}
    
  2. 如果您在声明value时指定了字符串,那么您的代码可能与您目前的代码类似:

    char value[6] = "hello";
    
  3. 如果您想分两行进行,则应使用strncpy()

    char value[6];
    strncpy(value, "hello", sizeof(value));
    
  4. 在名为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;