プログラム初心者です。現在、下のようなプログラムを作成して文字列をprintf出力しております。現状、文字列データの一部(何バイト目からここまでとか)を他の場所に抽出や取得をしたいのですが、それが出来なく大変困っています。
文字列の取得例)
aaaa.aa|xxx.xx|yyyy.yy|iiii
今、取得したい部分はx,y,iの部分で、文字数は100文字出力させております。
inti,loop;
charsendValue[100];
charreadValue[100];
intret;
intloopCnt;
loopCnt = 0;
ret = 0;
strcpy(sendValue,sendMsg);
printf("send\n");
for(i=0;i<len;i++){
write(fd,&sendValue[i],1);
usleep(50000);
}
while(1){
ret = read(fd,readValue,100);
printf("read-ret:%x\n",ret);
if(ret!=0xffffffff){
printf("readValue(%s):",ret);
for(i=0; i<ret; i++){
printf("%02X ",readValue[i]);
}
printf("\n");
return 0;
}
こんな感じです。ご教示お願いいたします。
No.1ベストアンサー
- 回答日時:
その「抽出したい」というのがどんな条件で、どんな風にやりたいのかがはっきりしないのですが。
単純には
while(i=0;抽出元が区切り文字?になるまで,または抽出する文字数まで; ++ i){
抽出結果[i]=抽出元[i+抽出開始の添字] ;
}
抽出結果[抽出した最後+1]='\0' ;
となるでしょう。場合によってはstrtokとかsscanfとかも有用でしょう。
あと、細かいようですが。
> if(ret!=0xffffffff)
このreadがシステムコールのものなら、今あなたが使っている環境では正しく動作するかもしれませんが、常に正しいとは限りません。
標準のCなら、マニュアルには「戻り値は読み込んだ文字数/失敗したら負の値」って書いてないですか?
環境によっては(例えば、intが64bitのCだったら) 0xfffffffff は「正」なので「失敗とは限らない」し、失敗で返ってくるのも必ず-1とは限らないです。
> printf("readValue(%s):",ret);
retはint型です。%sはcharへのポインタを要求します。
Cではprintfの中の型の不一致はエラーにはなりません。しかし、結果として致命的なエラーになるケースはあります。
この場合だと、retに入っている「文字数」を、「文字列が始まるアドレス」と解釈されてしまい、不正はエリアにアクセスしてしまうかもしれません。
わざわざご丁寧に質問以外の点までご回答いただきましてありがとうございます。大変助かりました。
参考にさせていただきます。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- その他(プログラミング・Web制作) test([)コマンドによる条件判定 2 2022/08/10 12:28
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
- C言語・C++・C# 【C言語】全角文字の配列を、全角のまま1文字ずつ出力する方法 4 2023/05/09 15:08
- C言語・C++・C# LU分解法のピボッティングについて(C言語/gcc-9) 3 2022/07/11 23:10
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
10個出力で改行したいのですが...
-
strcmp
-
printf で二進表示を行いたい。
-
改行について 1行に何個かづ...
-
【C言語教えてください】sin波...
-
c言語でAからZまでを表示する...
-
C言語プログラミング
-
CTRL+Dでループを抜けるには
-
二つの整数値の大小比較
-
%P と %X の違い
-
scanfに文字が入力されたときに...
-
コマンドプロンプトがすぐ消える
-
C言語で、 printf()とwhile文を...
-
C言語
-
BMI値から体型を判定するプログ...
-
分数を表示するプログラム(長...
-
C言語で入力した変数の値から三...
-
ガウスの消去法、後退代入について
-
4の倍数を論理演算で表す。。
-
C言語について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語について
-
printf で二進表示を行いたい。
-
cshの文字列操作(0埋め)
-
10個出力で改行したいのですが...
-
コンパイルエラーについて
-
テキストカーソル位置の取得
-
strcmp
-
unsigned int型について
-
c言語でAからZまでを表示する...
-
printf( " %2d", p * q );
-
コマンドラインに出力した文字...
-
printfの出力内の文字をdefine...
-
ホームページをC言語で作りたい...
-
コマンドプロンプトがすぐ消える
-
小数点切捨て表示
-
【C言語教えてください】sin波...
-
switch分のケースを範囲数?に...
-
二つの整数値の大小比較
-
4の倍数を論理演算で表す。。
-
defineで定数が置き換えられな...
おすすめ情報