从`char'到`char *'的无效转换

时间:2014-01-01 16:59:17

标签: c

代码是:

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]);

问题的原因是什么?

4 个答案:

答案 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在字符串上工作

你是在尝试交换单词或字符吗?