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 프로그램에서 쉘 명령을 실행하려고 시도합니다.
sprintf (cmdExecute, "% s \ n", "ls -l"); ' – dbndhjefj
내가 볼 수있는 유일한 것은'bytes + = (sizeof (outputCmd) -1);에 있습니다. 해당 바이트 수를 읽었는지 확인하십시오. 버퍼의 크기입니다. –
아, 알겠습니다. @szpal이 말하고자하는 것을 명확히하기 위해, 그가 가리키는'sprintf()'호출에 쉼표가 없습니다. 다른 한편으로, 나는'strcpy()'대신에'sprintf()'를 처음 사용하거나 문자열 리터럴을 직접 사용하는 이유를 알지 못합니다. –