トークンを2D配列に移動するのに苦労します。 アイデアは、複数の行を持つファイルを読み込み、行数を取得し、それに基づいてメモリを賢明に使用するために2次元配列を作成することです(100 x 3配列を作成する必要はありません)。mallocを使用してトークンを2D配列にコピー
私は2次元配列は、別の目的球に初期化されてしまったと思いますが、私はstrtokは(から読み出されたデータを入力しようとすると)、私はエラーを取得しています:ここで
error: 'arr' undeclared (first use in this function)
strcpy(&arr[s2][c2],token);
は私のコードです:
#include <stdio.h>
#include <string.h>
int ch, lines;
int no_of_lines(char* fp)
{
while(!feof(fp)) {
ch = fgetc(fp);
if(ch == '\n') {
lines++;
}
}
lines++;
return lines;
}
void declare_space_array(int size)
{
char* arr = (char*)malloc(size * 3 * sizeof(char));
return;
}
int main(void)
{
int c2 = 0;
int s2 = 0;
int len;
// char data[10][4];
static const char filename[] = "C:\\Users\\PC\\Documents\\Assignments\\stringops\\test.txt";
FILE* file = fopen(filename, "r");
no_of_lines(file);
printf("No of lines in file = %d", lines);
printf("\n");
// Closing file because it was read once till the end of file
fclose(file);
// Opening file again to read for parsing
file = fopen(filename, "r");
declare_space_array(lines);
char* token;
if(file != NULL) {
char line[128];
while(fgets(line, sizeof line, file) != NULL)
{
len = strlen(line);
printf("%d %s", len - 1, line);
const char s = ",";
token = strtok(line, ",");
while(token != NULL) {
strcpy(arr[s2][c2], token);
// printf("%s\n", token);
token = strtok(NULL, ",");
c2++;
}
s2++;
}
fclose(file);
} else {
perror(filename); /* why didn't the file open? */
}
for(r1 = 0; r1 < lines; r1++) {
for(c1 = 0; c1 < 3; c1++) {
printf("%s", &arr[r1][c1]);
}
}
return 0;
}
ファイルのようなものです:OUTPUTは次のようにSOMETHIGNすることが期待
A1,B1,C1
A2,B2,C2
A3,B3,C3
:
A1
B1
C1
A2
B2
C2
A3
B3
C3
'declare_space_array()'関数は単にメモリを割り当ててリークします。変数 'arr'はその関数に対してローカルです。その機能の外ではアクセスできません。 –
@JonathanLefflerグローバルにすることはできますか?または他の方法がありますか? – Fenomatik
['while(!feof(file)) 'は常に間違っていることに注意してください](http://stackoverflow.com/questions/5431941/while-feof-file-is-always-wrong)。 –