我在删除char数组中的前两个字符时遇到了问题。
input[MAXSIZE] = "./hello";
for(int i = 2; i < MAXSIZE; i+=2)
{
strcpy(input[i-2],input[i]);
}
我收到以下错误:
invalid conversion from ‘char’ to ‘char*’
initializing argument 1 of ‘char* strcpy(char*, const char*)’
invalid conversion from ‘char’ to ‘const char*’
initializing argument 2 of ‘char* strcpy(char*, const char*)’
我知道这是一个非常基本的问题但对我来说还是比较新的。 此外,如果有一种更容易解决这个问题的方法,请随时教育我。
答案 0 :(得分:3)
strcpy
复制空终止的char数组,而不是字符。
你想要的是:
input[i-2] = input[i];
另外,为什么不将i
与1
一起增加2
?
答案 1 :(得分:2)
正如其他人所说,strcpy
并不意味着像这样使用,你可以用
// loop step changed to 1; i += 2 is a mistake
for(int i = 2; i < MAXSIZE; ++i)
{
input[i-2] = input[i];
}
但是,您也可以使用memmove
:
memmove(input, input + 2, (MAXSIZE - 2) / sizeof(input[0]));
如果input
保证是char
的数组,您也可以删除/ sizeof(input[0])
部分。
当然甚至更好将使用std::copy_backward
标准库方式(必要因为源和目标范围重叠):
#include <algorithm>
std::copy_backward(input + 2, input + MAXSIZE, input + MAXSIZE - 2);
答案 2 :(得分:1)
作为替代解决方案,您只需使用指向char的指针即可“跳过”数组中的前两个字符:
char input[MAXSIZE] = {0};
snprintf_s<MAXSIZE>(input, _TRUNCATE, "./hello" ); //MSVC only
char* noDotSlash = input + 2;
cout << noDotSlash << endl; //should print just hello.
答案 3 :(得分:0)
strcpy
必须用于char数组而不是字符!!