您好,我来自印度尼西亚。我非常熟悉C ++编程。当我在C ++上学习字符串时,我遇到了一些问题。首先我声明了char数组,我想在不同的命令中分别初始化一个值。在我初始化值后,我的编译器说"无效参数"。
TkVersion
抱歉,如果我的英语不好:(
答案 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[]
):
char Name[5] = "Luke";
char Name[5]; strcpy(Name, "Luke"); /* don't forget to #include <string.h>*/
答案 3 :(得分:0)
仅仅是为了教育(因为其他答案都是回答这个问题的答案),这就是我如何编写你的代码来做同样的事情。
更改证明:
代码编译为带有/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;
}