何と呼ぶ?空文字とNullCharの違いについて

このQ&Aのポイント
  • VB 2008では、NullCharとはChr(0)の意味としているみたいです。これは、Asciiコードの慣例に従っているので納得。
  • しかし、空文字とNullCharは異なるものであり、区別されるべきです。
  • みなさんは二つをどのように区別して呼んでいますか?
回答を見る
  • ベストアンサー

""をなんと呼んでいますか?

Chr(0)---Nul or Null ""-------空文字 一体、双方を何と呼んでいますか? [イミディエイトウインドウ] ? ""=Nothing True ? Chr(0)=Noting True ? ""=ControlChars.NullChar False ? Chr(0)=ControlChars.NullChar True ? Len("") 0 ? Len(Chr(0)) 2 VB 2008では、NullCharとはChr(0)の意味としているみたいです。 これは、Asciiコードの慣例に従っているので納得。 では、"" を何と呼ぶか? Nothing=空文字と呼ぶのか? 一体、みなさんは二つをどのように区別して呼んでいますか?

noname#140971
noname#140971

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

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

"~"は文字ではなく文字列でしょう ""は空文字列とかEmpty Stringかな

noname#140971
質問者

お礼

""--------ヌル(null)、(空文字列)、ヌル値 Chr(0)----Nul1、ヌル文字 回答を読んであらためて両方の表現を考えてみました。 納得です。

関連するQ&A

  • 文字列の比較

    いつも参考にさせて頂いています。 基本的なことなのですが、宜しくお願いします。 たとえば文字列"str"の空チェックをするとします。 -------------------以下参考ソース String str = "test"; 1. public static String isBlank(String str) { if(str == null || str.equals("")) { return true; } return false; } 2. public static String isBlank(String str) { if(str == null || str.length = 0) { return true; } return false; } ■1と2の違いって何かありますでしょうか? ■空チェックなら1と2のどちらを使うべきでしょうか? 以上宜しくお願いします。

    • ベストアンサー
    • Java
  • マクロ コピー&ペーストで書式が変わる

    特定列のセルに入力があれば、文字数で書式を変更するコードを書きました。 リストから選択や手入力なら問題ないですが、コピー&ペーストだと、うまくいきません。 ペーストでも問題なく起動するコードはありますか? 【やりたい事】 特定の文字を入力→〇文字未満なら折り返し解除、縮小して全体表示、文字大きさ11。〇文字以上なら折り返して文字大きさ7で表示。 【現状】 コピー&ペーストだと、ペーストだと、文字フォント7で縮小して全体表示になってしまう。 コード Private Sub Worksheet_Change(Byval Target As Range) If Not Intersect(Target, Range(”AE:AE”)) Is Nothing Then If Len(Target.Value) < 8 Then Target.WrapText = False Target.ShrinkToFit = True Target.Font.Size = 11 ElseIf Len(Target.Value) >= 8 Then Target.WrapText = True Target.ShrinkToFit = False Target.Font.Size = 7 Else Exit Sub End If ElseIf Not Intersect(Target, Range(”AI:AI”)) Is Nothing Then If Len(Target.Value) < 5 Then Target.WrapText = False Target.ShrinkToFit = True Target.Font.Size = 11 ElseIf Len(Target.Value) >= 5 Then Target.WrapText = True Target.ShrinkToFit = False Target.Font.Size = 7 Else Exit Sub End If End Sub

  • TRUE、FALSEと言う文字で、1、0を表したいのですが・・・

    Perlで、「空文字列(""), ゼロ(0), ゼロを示す文字列("0")の値は偽として、それ以外は真」との決まりはあるようですが、どうもコードを書いていてわかりにくいので、TRUE、FALSEと言う文字で、1、0を表したいのですが、何か良い方法はありますか??? $TRUE=1; $FALSE=0; 以外でお願いします。

    • ベストアンサー
    • Perl
  • static変数の配列の初期値を空文字列にする一般的な方法

    いつもお世話になっております。 static変数の配列の初期値を空文字列(各要素が'\0')にしたいです。 static変数なので放って置いても各要素に'\0'が入りますが、 初期値として空文字列にしている事を明記したいです。 そこで以下の様な方法を考えてみました。 (1)初期値に何もせず、コメントを書いておく (2)初回起動フラグを持ち、フラグが立っていれば空文字列にする (3)初期値にnull文字をSTR_LENの数だけ書く (4)初期値の先頭のみnull文字にし、残りは省略する どの様な方法が一般的でしょうか? 上記以外にもあれば、教えていただければ幸いです。 また、以下は私が考えたそれぞれの方法のソースです。 -------------------------------------------------------------------------------- #include <stdio.h> #include <string.h> #define STR_LEN 16 #define FLAG_ON (1) #define FLAG_OFF (0) -------------------------------------------------------------------------------- /* 初期値に何もせず、コメントを書いておく */ -------------------------------------------------------------------------------- void clear_1(void) { static char hoge[STR_LEN]; /* 空文字列 */ } -------------------------------------------------------------------------------- /* 初回起動フラグを持ち、フラグが立っていれば空文字列にする */ -------------------------------------------------------------------------------- void clear_2(void) { static char hoge[STR_LEN]; static int first = FLAG_ON; if(first == FLAG_ON){ strncpy(hoge, "\0", STR_LEN); first = FLAG_OFF; } } -------------------------------------------------------------------------------- /* 初期値にnull文字をSTR_LENの数だけ書く */ -------------------------------------------------------------------------------- void clear_3(void) { static char hoge[] = {'\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0'}; } -------------------------------------------------------------------------------- /* 初期値の先頭のみnull文字にし、残りは省略する */ -------------------------------------------------------------------------------- void clear_4(void) { static char str[STR_LEN] = {'\0', }; } --------------------------------------------------------------------------------

  • MySQLのNOT NULL制約について

    MySQLでは、あるカラムをNOT NULL制約にしていたとしても、文字列型には空文字が、数値型には0を保存できます。 NULL、空文字、0をそれぞれ区別している仕様自体は問題ないと思いますが、NOT NULL制約のようにあるカラムで特定の値を許可しないような設定でできないのでしょうか。

    • ベストアンサー
    • MySQL
  • 全角の空白と半角の空白を区別して置換したい

    次のようなテキストデータに含まれる制御コードと空白を別の印刷可能な記号にワードのマクロを使って置換したいのですが、全角の空白と半角の空白を区別して置換したいのですが、全角の空白は半角の空白2個に認識してしまって、困っています。どのような書き方をすれば全角の空白を先に認識して■に置換できるのでしょうか?マクロのソースは最後に添えておきます。VABは勉強したことがないので、記録したマクロのソースをいじくっているだけですので初歩的な質問で恐縮ですが教えていただければ大変助かります。 ----(置換前) あいうえを かきくけこ さしすせそ たちつてと なにぬねの はまやらわ いきしちに ひみいりい わをん はひふへほ まみむめも やいゆえよ らりるれろ あいうえを かきくけこ さしすせそ たちつてと なにぬねの はまやらわ いきしちに ひみいりい わをん はひふへほ まみむめも やいゆえよ らりるれろ ----(終わり) ----(置換後) あいうえを~~かきくけこ△ さしすせそ~~たちつてと△ なにぬねの~はまやらわ△ いきしちに~~ひみいりい△ わをん△ [改頁] はひふへほ~まみむめも△ やいゆえよ~~らりるれろ△ あいうえを~かきくけこ△ さしすせそ~~たちつてと△ なにぬねの~はまやらわ△ いきしちに~~ひみいりい△ わをん△ [改頁] はひふへほ~まみむめも△ やいゆえよ~らりるれろ△ ----(終わり) ----(VBAソース) Sub ゲラ刷り() ' ' ゲラ刷り Macro ' 記録日 2007/08/13 記録者 ' ChangeFileOpenDirectory "D:\変換\" Documents.Open FileName:="gera.txt", ConfirmConversions:=False, ReadOnly:= _ False, AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:= _ "", Revert:=False, WritePasswordDocument:="", WritePasswordTemplate:="", _ Format:=wdOpenFormatAuto, XMLTransform:="", Encoding:=932 Selection.WholeStory Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = Chr(13) .Replacement.Text = "△" & Chr(13) & Chr(10) .Forward = True .Wrap = wdFindAsk .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = True End With Selection.Find.Execute Replace:=wdReplaceAll With Selection.Find .Text = Chr(10) & Chr(12) .Replacement.Text = "[改頁]" & Chr(12) .Forward = True .Wrap = wdFindAsk .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = True End With Selection.Find.Execute Replace:=wdReplaceAll With Selection.Find .Text = Chr(15) & Chr(81) & Chr(40) & Chr(14) .Replacement.Text = "■" .Forward = True .Wrap = wdFindAsk .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = True End With Selection.Find.Execute Replace:=wdReplaceAll With Selection.Find .Text = " " .Replacement.Text = "~" .Forward = True .Wrap = wdFindAsk .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = True End With Selection.Find.Execute Replace:=wdReplaceAll End Sub ----(終わり)

  • 文字列クラスを作りたいと思っています

    文字列クラスを作りたいと思っています。 以下のようなところまでは作れましたが、 エラーがでてしまいます。 どこかおかしいところがあるのでしょうか? *********************************************** #include<stdio.h> #include<string.h> class stt { public: char *str; int len; bool maked; stt::stt() { len=0; str=NULL; maked=false; } stt::~stt() { delete[] str; } stt &operator =(char *c) { if(maked) { delete[] str; maked=false; } len=strlen(c); str=new char[len]; strcpy(str,c); maked=true; return (*this); } virtual operator char*() { return str; } }; int main() { stt s; s="Hello World"; printf(s); getchar(); return 0; } ***********************************************

  • operator +()について

    --------------------------------------- 文字列クラスを作りたいと思っています。 以下のようなところまでは作れましたが、 全てのstrをdelete[] str;しているのかわかりません。 delete[] str;を確認するにはどうすればいいですか? --------------------------------------- #include<stdio.h> #include<string.h> #include<conio.h> class stt { public: char *str; int len; bool maked; stt::stt() { len=0; str=NULL; maked=false; } stt::~stt()// ちゃんとデストラクタ内で、全てのstrがdeleteされているのでしょうか? { if(maked) { delete[] str; } else { maked=true; } } stt &operator =(char *c) { if(maked) { delete[] str; maked=false; } len=strlen(c); str=new char[len+1]; strcpy(str,c); maked=true; return (*this); } stt &operator =(stt &ste) { if(maked) { delete[] str; maked=false; } len=strlen(ste.str); str=new char[len+1]; strcpy(str,ste.str); maked=true; return (*this); } stt operator +(stt ste) { stt tet; int len1=strlen(str); int len2=strlen(ste.str); tet.str=new char[len1+len2+2]; strcpy(tet.str,str); strcat(tet.str,ste.str); tet.str[len1+len2+1]='\0'; ste.maked=false;//不安部分 return tet; } virtual operator char*() { return str; } }; int main() { stt ss,ww,pp; ss="a"; ww="b"; pp=ss+ww; printf(pp); printf("\n"); getchar(); return 0; }

  • Excel:文字列の比較:大文字と小文字の区別

    Excel(2002)のワークシートの数式で文字列を比較するとき 半角英字の大文字と小文字が区別されないようなのですが、 区別するためにはどうしたらよいのでしょうか。 ※任意のセルで ="a"="A" とすると TRUE が帰ってくる。Countif などの動作も同様。 ※VBAでは次のコードを実行すると FALSE が表示される。 Sub compare() If "a" = "A" Then MsgBox "TRUE" Else MsgBox "FALSE" End If End Sub カテゴリ違いかもしれません。とすれば申し訳ありません。よろしくおねがいします。

  • Excell 2007で同じAとBの表を比較し、同じ行で同じ名前があげ

    Excell 2007で同じAとBの表を比較し、同じ行で同じ名前があげれTRUE、違えばFALSEを返したいのです。 この時大文字と小文字を区別しない方法をお教え下さい。 例 A1=ヒロ B1=ヒロ  (小文字で表示しています) A2=HIRO B2=HIRO これに対して A1=B1 A2=B2 などの式を入れるとFALSEになってしまいます。 これをTRUEで返すにはどうしたら良いでしょうか? ちなみに元のデータはそのままでお願いします。