はじめまして。だいちゃんともうします。
超初心者の質問で申し訳ないのですが、ご教授お願いします。
文字列
char data[1024]
"ヤマダ タロウ 20トウキョウト シブヤク ・・・・
というデータ(csvでない)がありそのデータを
char name[20]
char age[3]
char address1[10]
char address2[20]
・
・
というような桁数を定義した項目に移して処理を行いたいのですが
dataから各項目の文字列へ一度にデータを移す方法はないでしょうか?
文字列の定義の仕方で解決できるか調べたのですが、わかりませんでした。
よろしくお願いいたします。
文字列の移し方
Re:文字列の移し方
ベタな書き方をすれば、こんな感じでしょうか。 #include <stdio.h> #include <string.h> #define LEN_NAME (20) #define LEN_AGE (3) #define LEN_ADDRESS1 (10) #define LEN_ADDRESS2 (20) typedef struct person { char name[LEN_NAME+1]; // +1は終端の'\0'用(以下同様) char age[LEN_AGE+1]; char address1[LEN_ADDRESS1+1]; char address2[LEN_ADDRESS2+1]; } Person; int main(void) { // 1 2 3 4 5 // 12345678901234567890123456789012345678901234567890123 char data[1024] = "山田太郎 20 東京都 渋谷区神南1-1-1 "; Person person; strncpy(person.name, &data[0], LEN_NAME); person.name[LEN_NAME] = '\0'; strncpy(person.age, &data[LEN_NAME], LEN_AGE); person.age[LEN_AGE] = '\0'; strncpy(person.address1, &data[LEN_NAME+LEN_AGE], LEN_ADDRESS1); person.address1[LEN_ADDRESS1] = '\0'; strncpy(person.address2, &data[LEN_NAME+LEN_AGE+LEN_ADDRESS1], LEN_ADDRESS2); person.address2[LEN_ADDRESS2] = '\0'; printf("%s\n", person.name); printf("%s\n", person.age); printf("%s\n", person.address1); printf("%s\n", person.address2); return 0; }
Re:文字列の移し方
この掲示板は、マルチポストは禁止です。
こんな感じでいいのでしょうか。
#include <stdio.h> int main(void) { char *data = "山田太郎 20 東京都 渋谷区神南1-1-1 "; char name[21], age[4], adress1[11], adress2[21]; sprintf(name, "%.20s", data); sprintf(age, "%.3s", data + 20); sprintf(adress1, "%.10s", data + 23); sprintf(adress2, "%.20s", data + 33); printf("%s|\n", name); printf("%s|\n", age); printf("%s|\n", adress1); printf("%s|\n", adress2); return 0; }
Re:文字列の移し方
"一度に"だと、こっちの方がいいでしょうか。
#include <stdio.h> int main(void) { char *data = "山田太郎 20 東京都 渋谷区神南1-1-1 "; char name[21], age[4], adress1[11], adress2[21]; sscanf(data, "%20c%3c%10c%20c", name, age, adress1, adress2); name[20] = age[3] = adress1[10] = adress2[20] = 0; printf("%s|\n", name); printf("%s|\n", age); printf("%s|\n", adress1); printf("%s|\n", adress2); return 0; }