環境:VC2005 WinAPI32 C言語 SDK
上記の環境でプログラミングをしています。
よろしくお願いいたします。
char str[256]="";
strcat(str, "ABC");
str[4]=0;
strcat(str, "DEF");
たとえば上記のようなプログラムで、
str中のバイト数(文字列長?)を求めたいと思っています。
strの中身は [A][B][C][0][D][E][F][0][0][0]...[0]となっていますが、
このとき、7という値を取得したいのですが、何か効率的な方法はありますでしょうか・・。
No.3ベストアンサー
- 回答日時:
今回求めたい文字情報より後ろの配列の内容がゼロクリヤされているという前提なら, '\0'でない,最後に現れる要素の位置を返せばいいでしょう.
その前提が成り立たないなら,求めることは不可能です.
int i, len;
for(i=len=0; i<sizeof(str); i++)
if(str[i]) len=i+1;
とか,
int i, len;
for(i=sizeof(str)-1, len=0; i>=0 &&str[i]=='\0'; i--)
;
len=i+1;
どっちも効率的とは言い難いですが.
回答ありがとうございます。
ご提示されたプログラムで7という値を求めることができました。
もうすこし、C言語を勉強したいと思います・・・。
どうもありがとうございました。
No.2
- 回答日時:
> strの中身は [A][B][C][0][D][E][F][0][0][0]...[0]となっていますが、
そうはならないと思います。
> strcat(str, "ABC");
で、[A][B][C][0]...[0]
> str[4]=0;
で、[A][B][C][0][0]...[0] (実際には変化無し)
そして、
> strcat(str, "DEF");
で、[A][B][C][D][E][F][0]...[0] となるはずです。
まさしくそのとおりでした。
すみません。例のプログラムをまちがえていました。
char str[64]="";
str[0]='A';
str[1]='B';
str[2]='C';
str[3]=0;
str[4]='D';
str[5]='E';
str[6]='F';
とした場合に、7という値を求めたかったのです。すみません。
No.1
- 回答日時:
> strの中身は [A][B][C][0][D][E][F][0][0][0]...[0]となっていますが
[A][B][C][D][E][F][0][0][0]...[0]
では。
\0で終端されるのがC文字列の定義なので、長さ情報を別途持つ必要があるかと。
回答ありがとうございます。
すみません。例プログラムが間違っておりました・・。
char str[64]="";
str[0]='A';
str[1]='B';
str[2]='C';
str[3]=0;
str[4]='D';
str[5]='E';
str[6]='F';
とした場合に、strから7という値を求めたいということでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
- C言語・C++・C# sprintf()の使い方について 1 2022/08/17 16:16
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# C# 浮動小数の数値文字列化 1 2022/04/18 15:15
- Visual Basic(VBA) VBA ユーザーフォームからSubプロージャ―に値を引き渡す方法 3 2023/04/09 01:54
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
%dなどの違い
-
C++で入力した文字列から数字を...
-
プログラムによく出てくるst...
-
nullと""、\\0とEOFの違いにつ...
-
C++で文字列の右端から特定の文...
-
C言語の課題で困っています;
-
16進数を2文字ずつ配列に格納し...
-
VB6.0でのバイナリデータの扱い...
-
VBA-DLLの引数受け渡しについて
-
バイナリファイル中の日本語文...
-
C#でstringをポインタとして渡す
-
数字の入った配列をファイルへ...
-
文字コードによる表記
-
アルファベットの出て来た回数
-
CSVファイルの「”」について
-
シリアル通信で0x00を送信した...
-
c言語によって文字列を逆順する...
-
TCL言語で文字列検索方法を教え...
-
C言語のコンパイル時に表示され...
-
セグメントエラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C#でstringをポインタとして渡す
-
プログラムによく出てくるst...
-
C++で入力した文字列から数字を...
-
nullと""、\\0とEOFの違いにつ...
-
c#で他のアプリの文字入力フォ...
-
TCL言語で文字列検索方法を教え...
-
16進数を2文字ずつ配列に格納し...
-
シリアル通信で0x00を送信した...
-
_tcscpy_s(wcscpy_s)の第二引数...
-
WSH(VBS)でJSONの文字列を読み...
-
VB6.0でのバイナリデータの扱い...
-
C++で文字列の右端から特定の文...
-
数字の入った配列をファイルへ...
-
%dなどの違い
-
構造体→文字列→構造体 をする方法
-
char型配列の最大要素数
-
VBA-DLLの引数受け渡しについて
-
[C++]WCHARの1文字目しか表示で...
-
Shift_JIS(16進)を文字に変換す...
-
CSVファイルの「”」について
おすすめ情報