从Char数组中删除前两个字符

时间:2012-05-15 09:55:05

标签: c++ arrays char

我在删除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*)’

我知道这是一个非常基本的问题但对我来说还是比较新的。 此外,如果有一种更容易解决这个问题的方法,请随时教育我。

4 个答案:

答案 0 :(得分:3)

strcpy复制空终止的char数组,而不是字符。

你想要的是:

input[i-2] = input[i];

另外,为什么不将i1一起增加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数组而不是字符!!

同时查看此Que c remove the first character of an array