初始化字符串数组c ++中的值

时间:2017-11-19 13:06:55

标签: c++ arrays string

您好,我来自印度尼西亚。我非常熟悉C ++编程。当我在C ++上学习字符串时,我遇到了一些问题。首先我声明了char数组,我想在不同的命令中分别初始化一个值。在我初始化值后,我的编译器说"无效参数"。

TkVersion

抱歉,如果我的英语不好:(

4 个答案:

答案 0 :(得分:2)

  

字符数组(包括C字符串)在声明后不能为其分配新值。

     

C ++编译器将这些赋值语句解释为尝试更改存储在数组名称中的地址,而不是尝试更改数组的内容。

但是你可以使用

char name[] = "Luke";

答案 1 :(得分:0)

该语言不允许将字符串文字分配给字符数组。您应该使用strcpy()代替:

#include <string.h>

strcpy(Name, "Luke");

答案 2 :(得分:0)

char[]除了初始化之外,不能为=运算符分配字符串。这就是char Name[5]; Name = "Luke";无效char Name[5] = "Luke";的原因。

将字符串分配给char[]可以使用strcpy() / memcpy() - 就像函数一样。

所以你有两种行动方式(假设你想使用char[]):

  1. char Name[5] = "Luke";
  2. char Name[5]; strcpy(Name, "Luke"); /* don't forget to #include <string.h>*/

答案 3 :(得分:0)

仅仅是为了教育(因为其他答案都是回答这个问题的答案),这就是我如何编写你的代码来做同样的事情。

更改证明:

  • 使用了更合适的容器(字符串而不是char [])
  • 检查访问权限超支
  • 将“一个工作单元”移动到自己的子程序中

代码编译为带有/usr/bin/clang++ -Weverything -Wno-c++98-compat --std=c++1z的C ++ 17:

#include <cstddef>
#include <iostream>
#include <string>

using std::cout;
using std::endl;
using std::string;

void PrintCharAtPos(string const& s, string::size_type pos);

int main() {
  auto Name = string{"Luke"};

  PrintCharAtPos(Name, 0);
  PrintCharAtPos(Name, 1);
  PrintCharAtPos(Name, 2);
  PrintCharAtPos(Name, 3);
  PrintCharAtPos(Name, 4);

  return EXIT_SUCCESS;
}

void PrintCharAtPos(string const& s, string::size_type pos) {
  if (pos < s.length())
    cout << "Character " << pos << " : " << s[pos] << endl;
  else
    cout << "Character " << pos << " : (out of bounds)" << endl;
}