strcpy函数:C

时间:2014-07-29 04:16:55

标签: c string strcpy

我正在尝试实施

void strcpyy(char *s, char *t){
    while(*s++ = *t++){
    }
}

这是K& R的一个例子。实施应该相当容易,但由于某种原因,目前我的情况并非如此。所以我有以下

int main(){
    char *mess = "hello world";
    char *mess = (char *) malloc(strlen(mess) + 1);
    char *aess;

    strcpyy(aess, mess);

    printf("%s", aess);

    return 0;
}

每次运行程序时,每次使用-Wall运行时,我都会收到大量错误。我认为要实现和使用strcpyy,你必须使用malloc空间来复制字符串,一旦你这样做,你应该能够打印aess,理论上应该包含mess的副本{1}}。任何帮助将不胜感激!

4 个答案:

答案 0 :(得分:0)

注意错误消息始终是一个好习惯,尤其是第一条消息(其他通常是第一个错误的后果)。错误消息肯定表明与malloc对应的行号,并且很可能告诉你那里有什么问题。

更正你的程序:

char *mess = "hello world";
char *aess = (char *) malloc(strlen(mess) + 1);

或完整的功能是:

int main(){
    char *mess = "hello world";
    char *aess = (char *) malloc(strlen(mess) + 1);

    strcpyy(aess, mess);

    printf("%s", aess);

    return 0;
}

问题在于您的行

char *mess = (char *) malloc(strlen(mess) + 1);

覆盖第一行

char *mess = "hello world";

和行

char *aess;

将变量保留为未分配状态。

编译错误是因为编译器无法在

之间进行选择
char *mess = "hello world";

char *mess = (char *) malloc(strlen(mess) + 1);

引入一个新变量,但每个变量名称相同。

答案 1 :(得分:0)

该程序将采用以下方式

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void strcpyy( char *s, const char *t )
{
    while ( *s++ = *t++ );
}

int main( void )
{
    char *t = "hello world";
    char *s = ( char * )malloc( strlen( t ) + 1 );

    strcpyy( s, t );

    printf( "%s\n", s );

    free( s );

    return 0;
}

答案 2 :(得分:0)

更改

char *mess = "hello world";
char *mess = (char *) malloc(strlen(mess) + 1);
char *aess;

char *mess = "hello world";
char *aess = malloc(strlen(mess) + 1);

mess是一个字符串文字,保存在只读内存中。你正在覆盖它并丢失你想复制的字符串。在您的aess变量中,您需要为要复制字符的位置指定一些空格。另外,请记住程序结束时的free(aess);。如果没有,你会发生内存泄漏。

答案 3 :(得分:0)

为什么要两次声明和定义mess?如果它们具有相同的范围,则永远不要声明两个具有相同名称的变量,这样做会使编译器混淆; 我建议像这样使用strdup

int main(){
char *mess = strdup("hello world");
char *aess;

strcpyy(aess, mess);

printf("%s", aess);

return 0;

}

或只是像这样的普通数组

int main(){

char mess[] = "hello world";
char *aess;

strcpyy(aess, mess);

printf("%s", aess);

return 0;

}