test.csvの内容
test.csvの内容
"a","b","c","d"
"e","f","g","h"
"i","j","k","l"
"m","n","o","p"
"q","r","s","t"
"u","v","w","x"
"あ","い","う","え"
"か","き","く","け"
"さ","し","す","せ"
"た","ち","つ","て"
とし、真ん中のq,r,s,t以降の内容を表示させたく、下のようなプログラムを作成しました
しかし、コンパイル後実行しようとするとエラーになってしまいます。どう直したらよいか教えて頂けますでしょうか?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NAME "test.csv"
#define SIZE 32
struct tb{
char a[SIZE];
char b[SIZE];
char c[SIZE];
char d[SIZE];
};
int main(void)
{
struct tb test;
FILE *fp;
char buff[SIZE];
long pos;
pos=ftell(fp);
fseek(fp,pos,SEEK_SET);
while(fgets(buff,SIZE,fp) != NULL){
//各項目の設定
strcpy(test.a,strtok(buff,",\""));
strcpy(test.b,strtok(NULL,",\""));
strcpy(test.c,strtok(NULL,",\""));
strcpy(test.d,strtok(NULL,",\""));
printf("%s %s %s %s \n",test.a,test.b,test.c,test.d);
}
}
お礼
なるほど。その場所を括弧で囲むという考えが出てきませんでした。 a[][3]をポインタへ変形させたという捉え方でしょうか。 a[][3] → (a[])[3] → (*a)[3] といった具合に。 (真ん中はソースとしては変ですが…) sp[PR_SIZE][5]に関しては、文字列なので逆転させると別の箇所での扱いが不便になるため、別の関数を使ってみます。 仮に*a[3]としたときには、a[3][]の方でしょうか。 これだと関数の引数としては不適格ではありますが。
補足
一応、C++も扱える状況なので、引数だけを代えて同名で別の関数を作っておくことで回避してみます ありがとうございました