代码是:
int main() {
int i,last;
char TXT[500];
printf("Donnez un exemple ?\n");
gets(TXT);
last = strlen(TXT);
for(i=0;i<50;i++){
if (i==0){
strcpy(TXT[1],TXT[0]);
} else {
strcpy(TXT[i-1],TXT[i]);
}
}
getch();
return 0;
}
行中出现错误:strcpy(TXT[1],TXT[0]);
问题的原因是什么?
答案 0 :(得分:2)
strcpy
函数需要两个char*
(技术上,char*
和const char*
。此外,不允许传递strcpy
重叠缓冲区。
看起来你想写
TXT[i-1] = TXT[i];
(这会从字符串中删除前导字符)。
for(i=1 /* one, not zero */ ; i<50 ; i++) {
TXT[i-1] = TXT[i];
}
很好,但我想使用
strcpy
。怎么样?
如果没有中间缓冲区,则不允许使用strcpy
。如果您必须使用strcpy
,请执行以下操作:
char TXT[500], TMP[500];
printf("Donnez un exemple ?\n");
fgets(TXT, 499, stdin);
strcpy(TMP, &TXT[1]); // Note that 'for' loop is no longer required
答案 1 :(得分:1)
TXT
是一个包含500个字符的数组。
因此,TXT[1]
和TXT[0]
是个别字符(只有一个字母)
TXT[0]
是数组中的第一个字符
TXT[1]
是数组中的第二个字符。
函数strcpy
希望您为两个参数传递POINTER到字符(类型char*
)。
相反,你传递的是一个角色。
你能解释一下这个程序的目的是什么吗?
也许我们可以帮你解决它。
答案 2 :(得分:1)
TXT[i]
的类型为char
。但是strcpy
期望类型为char*
的参数,因为它对以null结尾的字符串进行操作。因此编译错误。
至于如何修复它,这取决于您的代码尝试做什么。也许你所要做的就是
TXT[1] = TXT[0];
答案 3 :(得分:0)
STRING FUNCTIONS在字符串上工作
你是在尝试交换单词或字符吗?