在C中挣扎着strcat函数

时间:2013-02-02 05:46:59

标签: c pointers char strcat

我现在对我的程序非常感到沮丧。我希望strcat函数只是简单地将所需的字符串连接在一起,但显然strcat函数(当取消注释时)不能使连接正确,并以某种方式改变我的变量的值。如果打印正确的结果,例如:

/usr/local/sbin
/usr/local/sbin
/usr/local/bin
/usr/local/bin
/usr/sbin
/usr/sbin
... (etc)

但是当这两行被取消注释时

//strcat(file_loc, slash);
//strcat(file_loc, temp);

然后这是我得到的古怪结果:

/usr/local/sbin
/usr/local/sbin/ls
ls
ls/ls
/usr/sbin
/usr/sbin/ls
... (etc)

这是我正在处理的功能。非常感谢帮助。

void step_four (void) {
    int n=0;
    int has_slash=0;
    const char * slash="/";
    char * aa;
    char bb[64];
    int cc=0;
    int len;
    char * file_loc = malloc(100);
    char * temp= malloc(100);
    char * temp2 = malloc(100);
    //char [] f="FOO";


    printf("XXXXXXXXXXXXXXXXXXXXXXXX\n");
    printf("Made it to step 4\n");
    printf("First word of command is: %s\n", words[0]);

    aa = words[0];
    len = strlen(aa);

    while (cc < len) {
        bb[cc] = *(aa + cc);
        cc++;
    }

    while(n < len) {
        if (bb[n++] == '/') {
            //printf("HELLO !!\n");
            has_slash=1;
            break;
        }
    }


    //printf("has_slash=%d\n", has_slash);

    n=0;

    while (paths[n] != NULL) {
        //printf("%s\n", paths[n]);
        file_loc = paths[n];
        //file_loc[strlen(file_loc)]='\0';
        temp = words[0];
        if (has_slash) {
            //do stuff for slash

        }
        else {  
            printf("%s\n", file_loc);
            //strcat(temp2, "a");
            //strcat(file_loc, slash);
            //strcat(file_loc, temp);
            //file_loc[strlen(file_loc)]='/';
            //file_loc[strlen(file_loc) + 1]='/0';
            printf("%s\n", file_loc);
        //  f = file_loc;

        }
        n++;
    }

}

1 个答案:

答案 0 :(得分:0)

http://www.cplusplus.com/reference/cstring/strcat/

char * strcat ( char * destination, const char * source );

“将源字符串的副本附加到目标字符串。目标中的终止空字符覆盖由source的第一个字符组成, null-character 包含在新字符串的末尾,由目标中的两个串联形成。“

以上引用来自cplusplus。