2016-09-28 5 views
0
dev_list* somefunc() 
{ 
    FILE* ExecutionResult; 
    int deviceCount; 
    int deviceIndex[50]; 
    char cmdExecute[50],finalOutputCmd[1000],outputCmd[100]; 
    int i; 
    int bytes = 0; 
    char* temp = 0; 
    sprintf(cmdExecute,"%s\n" "ls -l"); 
    printf("command = %s\n",cmdExecute); 
    ExecutionResult = popen(cmdExecute,"r"); 
    memset(finalOutputCmd,0,sizeof(finalOutputCmd)); 

    deviceCount = 0; 
    deviceIndex[deviceCount] = 0; 
    if (ExecutionResult) 
    { 
     if (fgets(outputCmd, sizeof(outputCmd)-1, ExecutionResult) == NULL)    { 
      printf("no bytes read\n"); 
      bytes += (sizeof(outputCmd)-1);         
     } 
    } 
    printf("hello %d,%d\n",i,bytes); 
    return 0; //deviceList; 
} 

왜 fgets에 seg 결함이 있습니까? 필자는 출력이 파일로 보내지는 파이프 내부의 쉘 명령을 실행합니다. 하지만 다시 읽으려고 할 때 seg 오류가 있습니다.fgets에서 세그먼트 화 오류가 발생했습니다. C 프로그램에서 쉘 명령을 실행하려고 시도합니다.

+2

sprintf (cmdExecute, "% s \ n", "ls -l"); ' – dbndhjefj

+1

내가 볼 수있는 유일한 것은'bytes + = (sizeof (outputCmd) -1);에 있습니다. 해당 바이트 수를 읽었는지 확인하십시오. 버퍼의 크기입니다. –

+4

아, 알겠습니다. @szpal이 말하고자하는 것을 명확히하기 위해, 그가 가리키는'sprintf()'호출에 쉼표가 없습니다. 다른 한편으로, 나는'strcpy()'대신에'sprintf()'를 처음 사용하거나 문자열 리터럴을 직접 사용하는 이유를 알지 못합니다. –

답변

0

해결책을 얻었습니다. 나는 strcat을했는데, 그것은 원인이었다. finalOutputCmd [1000]의 크기를 50,000으로 늘 렸습니다.