私は今、自分のプログラムに本当に不満を感じています。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++;
}
}