포인터에 대한 작은 개념적 질문이 있습니다. 이것은 당황 스러울 지 모르지만 그 해답을 알아야합니다.C 포인터 질문
getline 함수를 사용하여 파일에서 한 줄을 읽으려고했습니다. getline은 첫 번째 인수로 char **를 취하며, 이는 라인 포인터가 저장되는 곳입니다. 아래의 붙여 넣은 코드를 확인하고 그 차이점을 알려주십시오. readLine 포인터의 선언과 사용에 주목하십시오.
두 번째 코드는 printf()에 도달했을 때 세그먼트 오류가 발생했습니다. printL() 전에 gdb로 * readLine의 값을 검사했는데 정확했지만 printf()로 갔을 때 붐 SIGSEGV
이 코드는 작동합니다 : FILE * fp;
char *readLine;
readLine=NULL;
int s=0;
while(getline(&readLine,(size_t *)&s,fp) != -1){
printf("%s\n",readLine);
}
이 코드는 작동하지 않습니다. FILE * fp;
char **readLine;
*readLine=NULL;
int s=0;
while(getline(readLine,(size_t *)&s,fp) != -1){
printf("%s\n",*readLine);
}
환호 ...이 32 비트의 int
와 64 비트 시스템을 중단한다
(사람에게 물고기 줄 것) 대신에 http://www.ericgiguere.com/articles/reading-c-declarations.html과 http://www.antlr.org/wiki를 읽는 것이 좋습니다./display/CS652/How + To + Read + C + Declarations (남자에게 물고기를 가르치기) –
'works'라고 말하는 코드는 C로 프로그래밍하는 데 100 % 잘못된 방법입니다. 진행하기 전에 기본을 고쳐야합니다. 더 이상. – Donotalo
@Donatalo : s는 size_t로 선언되어야하고, readLine을 NULL로 설정하는 것은 불필요합니다. 하지만 그렇지 않으면 나는 이것이 괜찮다고 생각한다; 100 % 잘못 된 것이 조금 가혹합니다. 아니면 다른 것을 놓치고 있습니까? –