【发布时间】:2017-09-01 23:06:17
【问题描述】:
我试图反转一个字符串,但我遇到了一个问题,它说“下标值既不是数组也不是指针也不是向量”指向 char holder = input[i];有人可以帮我解释一下吗
myreverse(input, rev, len)
{
int i = 0;
int j= len -1;
char string[len];
while(i<j)
{
char holder = input[i];
string[i]= string[j];
string[j] = holder;
i++;
j--;
}
}
int main(int argc, char* argv[]) {
if (argc < 2) {
printf("Usage: %s <word to reverse>\n", argv[0]);
exit(1);
}
char* input = argv[1];
int len = strlen(input);
char rev[len + 1]; // Adding one for the null terminator
myreverse(input, rev, len);
printf("Rev string is %s\n", rev);
}
【问题讨论】:
-
不要使用 K&R(准标准)C 函数声明。你省略了
myreverse()函数中的类型,所以返回类型和参数类型都假定为int,你不能下标int。它应该是void myreverse(char *input, char *rev, int len)或附近。您不要在代码中使用rev参数;这也很糟糕。 -
@JonathanLeffler 奖励:尝试将隐式
int与 VLA (char string[len]) 结合使用,这是 C99 功能。 -
@melpomene,为什么是“奖金”?两者都是完全合法的。如果你要责备某些事情,那就责怪 C 接受这种松懈的输入。
-
@zneak 不在一起。 C99 添加了 VLA,但从语言中删除了隐含的
int。 -
我相信the point stands 认为,如果有人要责备,那不是新开发人员试图找出 45 年的包袱。
标签: c