Word でいっぱいの巨大な stdin を読み取るプログラムを作成しています。入力を最大 100 文字の文字列に分割したい。だからここに私のコードがあります。
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
static char* string = "\0";
void getChar(char new){
if (strcmp(string,"\0") == 0){
free(string);
string = (char *) malloc(sizeof(char));
if (string == NULL){
exit(EXIT_FAILURE);
}
string[0] = new;
} else {
char* newString = (char*) realloc(string, sizeof(string)+sizeof(char));
if (newString == NULL){
exit(EXIT_FAILURE);
}
string = newString;
string[strlen(string)]=new;
}
if (strlen(string) > 100){
printf("%s\n",string);
dosomething(string);
string = "\0";
}
}
void getInput(){
int temp;
while((temp = fgetc(stdin)) != EOF){
getChar((char) temp);
}
}
int main(int argc, char *argv[]){
getInput();
}
コードをコンパイルして実行すると、すぐに次のようなエラーが表示されます。
*** glibc detected *** ./sort: realloc(): invalid next size: 0x08f02008 //ofc this address always changes
それ以降のバージョンでは、100 文字を超える文字列を無視して \n でフィルタリングします。