• ベストアンサー

文字列の切り出し

C言語で文字列の途中のデータの切り出し&コピーをしたい。 char b(3); a="R13000001"; 上記のとき、aのエリアの1バイト目から3バイトを 抽出したい。 bのエリアに「130」をコピーする。

質問者が選んだベストアンサー

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

バイト単位のコピーには、memcpy() を使います。 char* a; char b[3]; a="R13000001"; memcpy(b, &a[1], 3); となります。詳しくはマニュアルを見てもらうとして、memcpy() の引数は、 memcpy(コピー先領域のアドレス, コピー元領域のアドレス, コピーするサイズ); となります。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 文字列のコピー

    C言語で、文字列をコピーする関数で、処理が止まってしまいます。 以下が実行したプログラムです。 #include<stdio.h> #include<string.h> void copy(char *str2 ,char *str3){ strcpy(str2,str3); } void input(char* str){ scanf("%s",str); } int main (void){ char *a; char *b="TEST"; printf("%s\n",b); input(a); copy(b,a); printf("%s",b); return(0);} copy(b,a);で処理が止まってしまいます。入力した文字列を表示できるように、御指摘お願いします。

  • 文字列の反転

    こんばんわ。C言語初学者の者です。早速質問させてください。 (1) char a; aの中身には、アルファベット小文字の文字列が5個並んでいるとします。 その文字列を前後反転させるにはどうすればいいでしょうか? 例えばabcdeと並んでいる文字列をedcbaとする場合です。(キーボードからabcdeと打ち込んだとき、aにedcbaと格納させたいのです) (2) char a;   char b;  中身は文字列で、二つを合体させたい場合どうすればいいのでしょうか?  例えば aにはth 、bにはatと格納されている場合thatと繋げたいのです。  よろしくお願いします。

  • Cでは文字列をどのように認識するのでしょうか?

    C言語には文字列型というものは存在しないと教わりました。 文字列の終わりはヌル文字で認識できますが、 文字列型というものが存在しないのに何故次のバイトを読もうとするのですか? たとえばchar str[] = "abc";、あるいはchar *p = "abc";とあったとして printf(str);あるいはprintf(p); でなぜabcが出力されるのでしょうか?なぜaの次にbがbの次にcがあるとわかるのでしょうか? char型で先頭アドレスが渡された場合、ヌル文字を見つけるまでアドレスをインクリメントし続けるという決まりでもあるのでしょうか? それに文字列型というものが存在しないなら''と""を分ける意味もないのでは??

  • 文字列の検索

    先日同じ質問をして、プログラムの内容を修正したのですが、今度は2つ文字列を入力した後0が無限にでてきます… どなたか解説・指摘・模範解答などおねがいします。 内容は最初にある文字列を入力して、その後別の文字列を入力して、 後に入力した文字列が最初に入力した文字列に含まれていれば1、 含まれていなければ0と表示するプログラムです。 (使用するのは#include<stdio.h>のみ、ポインタ変数必須です) #include<stdio.h> char *mystrfin(char *a, char *b); int main(void) { char *c,*d; char str1[100],str2[100]; printf("1>>"); fgets(str1,100,stdin); printf("2>>"); fgets(str2,100,stdin); *mystrfin(c,d); } char *mystrfin(char *a,char *b){ char *c,*d; while(c!='\0'){ c=a; d=b; while(c!='\0' && d!='\0'){ if(c!=d) printf("0"); break; c++; d++; } } if(d='\0') printf("1"); a++; return a; return NULL; } 例 検索対象文字列:asdfghjkl 検索文字列:sdf 1と出力 検索対象文字列:asdfghjkl 検索文字列:qwer 0と出力

  • ■近似している文字列を抽出したい

    エクセル内に数万件のレコードが書き込まれています。 登録されているデータの品質をチェックしたいため、 特定の列を参照し、類似しているデータは一括で抽出したいと考えています。 エクセルの関数だけに限った際、 下記のようなやり方があるかと思いますが、 一括で抽出することができないためお知恵をいただきたい所存です。 現在のチェック方法 (1)B2のリンゴをA1にコピーし、C列はA1とB列の文字列の適合率を表示する。 (2)C列の適合率が高いもの(仮に90%以上適合した文字列)を目検でチェック (3)B3以降をA1に順次コピーして(1)~(2)のチェックを行う        |A列    |B列    |C列 1      |リンゴ  |       | 2      |      |リンゴ   |100% 3      |      |すいか  |0% 4      |      |もも    |0% 5      |      |すもも   |0% 6      |      |メロン   |33% 7      |      |生ハム  |0% 8      |      |おリンゴ |100% ■ご質問させていただく内容 ・近似した文字列の適合率を一括で調べるもしくは抽出するツールをご存知でしょうか? ・もしくは、上記に記載した内容をマクロで組むことができるでしょうか? 例えば以下のような流れです。 ※上図を参考に説明 (1)Sheet1のB2の文字列の適合率をB2:B8まで順次計算してC列に代入 (2)Sheet1のC列を参照し、B2の行以外で適合率が90%以上の場合、Sheet2のA列に代入 (3)B3~B8まで(1)~(2)の処理を繰り替えす。 ※参考になるサイトやプログラムなどをご教示いただければ幸いです。 よろしくお願い致します。

  • スペースを含んだ文字列から文字列の抽出

    エクセルバージョン2007 スペースを含む文字列で、A列に文字列がある時、以下の式を組んで文字列を抽出しています。 先頭にIDの数字が有る場合は、それぞれの目的に合った文字列を抽出しています。 B1=LEFT(A1,SEARCH(" ",A1,1)-1) C1=LEFT(MID(A1,SEARCH(" ",A1,1)+1,LEN(A1)-SEARCH(" ",A1,1)),SEARCH(" ",MID(A1,SEARCH(" ",A1,1)+1,LEN(A1)-SEARCH(" ",A1,1)),1)-1) 3 3df-32654-10 CCCCHH 10 1ab-12345-00 AAABBBB この文字列の場合、B列に3と10が表示、C列に 3df-32654-10 1ab-12345-00が表示されます。 先頭に、IDの無い文字列は以下の様な構成です。 6rt-95132-00 PPPKKK この文字列の場合、B列に6rt-95132-00、C列にPPPKKKが表示されてしまい、この場合、IDの数字が無い場合はB列には表示させない又は、C列に6rt-95132-00させたいと思っています。 ご教授頂ければ幸いです。 以上、宜しくお願い致します。

  • C言語で取得した文字列を、C++の文字列として取り扱いたいです。

    C言語で取得した文字列を、C++の文字列として取り扱いたいです。 皆さんこんにちは。 C言語で取得したchar型で定義された文字列を、 C++の「std::string」に渡したいと思っております。 どうすればかなうでしょうか? 具体的には次のような内容です。 ■C言語側 ---- char key1 = "deperture"; ---- ■C++側で「key1 = key2」としたいです。 ---- std::string key2 = key1; ---- C言語側で記述されている「key1」の値(deperture)を、 C++ソース内の「key2」に渡したいと思っています。 こうゆう場合、どんな方法をとれば適切でしょうか。 C言語側でのchar型の文字列の値を、 C++側の「std::string」型として C++のソースへ渡す方法が分からないです。 アドバイスいただけるとありがたいです。 簡単な例を頂けると更に大変ありがたいです。 以上どうぞ宜しくお願い致します。

  • 文字列をハッシュにしなければならないのですが

    C言語にさ ファイルの中にある、3バイトunicodeの漢字文字列郡をハッシュテーブルに格納してハッシュを作りたいんですが、取っ掛かりすらつかない状況です。 とりあえず、配列から3バイトの16進数にして、後はその文字列分の16進数を足して、それを割ってキーをつくりテーブルにいれる、としようとしています。 配列から3バイトの16進数にする int joint(char a, char b, char c){ int join = 0; join = a<<8; join = (0x0000FF00 & join) + (0x000000FF & b); join = join<<8; join = (0x00FFFF00 & join) + (0x000000FF & c); return join; } このように16進数にするのですが、最初の取っ掛かりとしてのハッシュについては、どうやったらハッシュテーブルに格納でくるのかいまいちわからないのです。誰かわかりやすく教えてください。

  • 文字列の置換えがうまくいきません

    A  B  C   1 *  11  11 2 *  12  12 3     13 4 *  14  13 5     15 6 *  16  14 7 *  17  15 上記のように B列の文字列を、A列の*がある行に対応するようにC列に並べ替えたいです。A列に*が無い行はそのC列の同じ行のセルは空けておきたいです。 A列の*の配置、B列の文字列は時々で変わります。 どのような関数・方法を用いれば上記のようなことができるでしょうか。 よろしくお願いします。

  • 正規表現を使った文字列の切り出し

    こんにちは ver_51 と言います. 決まったパターンの文字列から正規表現を使って抽出する方法で悩んでいます. 文字列のパターンは以下の通りです. 任意の文字列は.*で表しています. String line = ".*<a href=".*" .*">抽出したい箇所1</a>.*<a href=".*" .*">抽出したい箇所2</a>.*以下同じように続く"; String tray = new tray[100]; 実現したいことは正規表現を使って抽出したい箇所がある限り,trayに順番通りにいれるというものです. この場合だと tray[0]="抽出したい箇所1"; tray[1]="抽出したい箇所2"; ・ ・ ・ と入ってほしいです. お手数ですが,どうぞ宜しくお願い致します.

    • ベストアンサー
    • Java
このQ&Aのポイント
  • 無線LAN接続でスマホから写真を印刷する際、エラーメッセージが表示され印刷ができない問題が発生しています。
  • バッファローのWi-Fiにはセキュリティはかけていないため、複数端末で接続可能です。
  • 解決方法としては、モバイルコネクトアプリを使用することで印刷が可能になります。
回答を見る

専門家に質問してみよう