此代码一直说:错误:初始化程序无效
char * ss = "hello world";
char s[10] = ss;
std::transform(s, s + std::strlen(s), s, static_cast<int(*)(int)>(std::toupper));
如何解决?
答案 0 :(得分:2)
带有C字符串的数组的初始值设定项无效。好消息是你根本不需要它:
char * ss = "hello world";
char s[12];
std::transform(ss, ss + std::strlen(ss)+1, s, static_cast<int(*)(int)>(std::toupper));
cerr << s << endl;
请注意,我为s
数组填充了一个额外的元素,用于终止零。
答案 1 :(得分:1)
char s[10] = ss;
这会尝试将数组的值设置为等于指针,这没有任何意义。另外,十个字节不够(在C风格的字符串的末尾有一个终止的零字节)。尝试:
char s[20];
strcpy(s, ss);
答案 2 :(得分:0)
您无法为数组指定指针,因为您无法将任何内容分配给数组,而是指定初始化列表。您需要将字符从ss
复制到s
。此外,大小为10的数组太小而无法容纳"hello world"
。例如:
char * ss = "hello world";
char s[12] = {}; // fill s with 0s
strncpy(s, ss, 11); // copy characters from ss to s
或者,您可以
char s[] = "hello world"; // create an array on the stack, and fill it with
// "hello world". Note that we left out the size because
// the compiler can tell how big to make it
// this also lets us operate on the array instead of
// having to make a copy
std::transform(s, s + sizeof(s) - 1, s, static_cast<int(*)(int)>(std::toupper));
答案 3 :(得分:0)
您的阵列分配是非法的,如果是您的代码,则首先不需要。
const char * ss = "hello world";
char s[12];
std::transform(ss, ss + std::strlen(ss)+1, s, static_cast<int(*)(int)>(std::toupper));