2011-07-28 3 views
-3
#include<stdio.h> 
#include<stdlib.h> 
main() 
{ 
    int i; 
    char commandBuffer[3][10]={"ls -l","ll","top"}; 
    for(i=0 ; i<1 ; i++) 
    { 
     system("> gksudo cd /home/phoenix | command[i]"); 
     system("\n"); 
     printf("%d\n",i); 
    } 
    printf("The end\n"); 
} 

난 내가 동적으로 system() 그러나 여기에서 발생하는 문제가 command[i]에 포함 된 문자열이 배관에 대한 입력으로 간주되지 않을 것입니다를 사용하여 명령을 실행하고자하는 프로그램을 가지고 ...하지만이 경우 잘 작동 I 수동 예컨대 여기 system("> gksudo cd /home/phoenix | ls -l");문자열 버퍼를 사용하여 명령을 어떻게 동적으로 파이프합니까?

+1

제출을 클릭하기 전에 질문을 미리보십시오. 이것은 약간 정리 될 수 있습니다. 그러면 사람들이 더 행복하게 답변 할 수 있습니다. – Joe

+0

더 나은 제목을 추가해보십시오.) – Peter

+1

그래, 내 생각은 "아니야. :) –

답변

1

system("> gksudo cd /home/phoenix | command[i]");

같이 각 명령 입력 "명령 [I]는"리터럴 스트링으로 간주된다. 따라서 command[i]의 값은 이 아니며이 아닙니다.

char cmd_buff[MAX_BUF]; 

strcpy (cmd_buff, "> gksudo cd /home/phoenix |"); 
strcat (cmd_buff, command[i]); 

여기에 command[i]은 큰 따옴표 안에 들어 있지 않습니다. 이것을 이해하기 위해 C의 문자열 상수와 식별자에 대해 읽어보십시오.

+0

고마워요. 그리고 당신이 제안한대로 코드를 수정했습니다 ... str은 단지 기능을 테스트 한 것이기 때문에 필요하지는 않습니다 ... – phoenix

+1

네,하지만 초등의 실수가 있습니다. 변수 식별자를 사용하려고했습니다. 명령을 "run command"와 같은 문자열 안에'command '로두면,'command'에 의해 식별 된 변수의 내용은 첫 번째 경우에는 대체되지 않고 그대로 유지됩니다. 그러나 다음 경우에는 대체됩니다. 이 초보적인 것을 이해했는지 확인하십시오. – phoxis

관련 문제