-4

私は今、自分のプログラムに本当に不満を感じています。strcat関数は、目的の文字列を単純に連結することを期待していますが、strcat関数(コメント化されていない場合)は連結を正しく行わず、変数の値を変更するようです。現状では、印刷された場合の正しい結果は次のとおりです。

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

しかし、これらの2行がコメントされていない場合

//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++;
    }

}
4

1 に答える 1

0

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

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

「ソース文字列のコピーを宛先文字列に追加します。宛先の終端のヌル文字はソースの最初の文字で上書きされ、宛先両方を連結して形成された新しい文字列の末尾にヌル文字が含まれます."

上記の引用は cplusplus からのものです。

于 2013-02-02T05:54:32.667 に答える