0

我无法从我的 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

4 回答 4

3

strcpy复制以空字符结尾的字符数组,而不是字符。

你想要的是:

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

另外,你为什么不增加iwith 1but with 2

于 2012-05-15T09:56:15.357 回答
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);
于 2012-05-15T09:57:57.543 回答
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.
于 2012-05-15T10:13:41.150 回答
0

strcpy必须用于 char 数组而不是字符!

还要查看这个 Que c 删除数组的第一个字符

于 2012-05-15T09:57:57.210 回答