프로그램을 올바르게 수정하고 실행할 수는 있었지만 실제로 작동하지 않는 이유는 저를 매우 흥미롭게 만들었습니다.malloc()으로 할당 된 메모리를 채우는 효과
malloc을 사용하여 문자열을 만들고 초기화했습니다. 그 다음에 여러 개의 strcat를 사용했습니다 ... 그리고 나서 파일 포인터를 선언합니다. 그 후 내 문자열이 약 이상일 경우. 26 chars 나머지는 쓰레기가 될 것입니다 ...하지만 내가 malloc 문자열에 이전에 포인터를 선언했다면 훌륭하게 작동했습니다.
코드 :
char* holder=(char*)malloc(sizeof(char)*100);
for(i=0;i<100;i++)
*(holder+i)='\0';
strcat(holder,"set xtics (");
//will ignore until the last n lines
for(i=0;i<26-n;i++)
readline(sfd,line,29);
//will manage the last lines
char n_column[2];
char freq[3]={0};
for(i;i<26;i++)
{
readline(sfd,line,29);
sscanf(line+4,"%s",freq);
write(out,freq,strlen(freq));
write(out,"\n",1);
strcat(holder,"'");
sscanf(line,"%s",temp);
strcat(holder,temp);
strcat(holder,"'");
sprintf(n_column,"%d",counter);
strcat(holder," ");
strcat(holder,n_column);
//for the las one which won't have the ,
if(i==25)
strcat(holder,")");
else
strcat(holder,", ");
counter++;
}
//sending to gnuplot using pipe
printf("Before: %s\n",holder);
FILE *pipe = popen("gnuplot -persist","w"); //why can't it be here!!!!
printf("After: %s\n",holder);
출력 :
전 : 세트 xtics를 사람이 더 pls는 그렇게 말을 참조하는 것이 좋습니다 생각하면 난 그냥 여기 코드의 일부이다, 이유를 이해할 수 없다 ('a'0, b 1, c 2, d 3, e 4, f 5, g 6, j 7, k 8, l 9 , 'm'10, 'n'11, 'o'12, 'p'13, 'q'14 'r'15 'u'16 'v'17 ''w '18' 'x'19 , 'y'20, 'z'21 ''h '22' 'i'23 ''t '24's '25)
이후 xtics ('a '0,'b '1, 'c'2, 'd'3, 'e'4, 'f'5, 'g'6, 'j'7, 'k' 8 '패'9 'm'10 '없음'11 'O'
하지만 변경하는 경우 :
FILE * 파이프 =는 popen ("의 gnuplot -persist", "w");
char* holder=(char*)malloc(sizeof(char)*100);
for(i=0;i<100;i++)
*(holder+i)='\0';
출력이 정상입니다.
왜 파일 포인터를 선언하면 그렇게 큰 차이가 있습니까? 아니면 그 외에 뭔가가 있습니까?
양해 해 주셔서 감사합니다.
왜 C를 사용하고 있습니까? 당신은 메모리 관리를 이해하지 못하는 동안 그것을 사용하여 많은 해를 끼치는 것처럼 보입니다. 작은 문자열에서 문자열을 만드는 것과 같은 간단한 일을 망칠 수없는 Python이나 Java와 같은 언어를 사용해보십시오. :) –
원래 제목이 질문의 주제와 관련하여 단서를 제공하지 않았기 때문에 제목을 편집했습니다. – pavium
가장 좋아하는 답변을 수락하는 것을 잊지 마십시오. 또는 다른 사람들이 선호하는 대답을 받아들입니다. 들어갈 좋은 습관이 될 것입니다. – pavium