나는 지금 내 프로그램에 정말 좌절감이있다. strcat 함수는 단순히 원하는 문자열을 연결하지만 strcat 함수 (주석 처리되지 않은 경우)가 연결을 올바르게 처리하지 못하고 어떻게 든 내 변수의 값을 변경합니다.C에서 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++;
}
}
'strcat'에 대한 호출 대신'snprintf' (또는'asprintf')를 사용하는 것을 고려 했습니까? 그것은 아마도 귀하의 작업에 더 적합하고 훨씬 안전합니다! 또는 C++로 코딩하는 경우'std :: string'을 사용하십시오. –
'strcat()'**는 첫 번째 인수를 변경합니다 **. –
@ H2CO3이 잘못되었습니다. 고양이는 어떤 주장도 바꾸지 않습니다. (jk) –