どのように私はCの "char *"配列の長さを見つけるのですか?
次の配列を宣言します。char* array [2] = { "One", "Two"};
この配列を関数に渡します。この配列の長さを関数でどのように見つけることができますか?
どのように私はCの "char *"配列の長さを見つけるのですか?
次の配列を宣言します。char* array [2] = { "One", "Two"};
この配列を関数に渡します。この配列の長さを関数でどのように見つけることができますか?
余分な努力なしに関数に渡した後、配列の長さを見つけることができません。あなたはする必要があります
vector
として、サイズを格納した容器を使用してください。、ほとんどの人は、Cの文字列はこのように動作していることを後悔します。
こうして彼らはB弦を発明した。 –
@MooingDuckリンクGoogleが対象のお母さんです:)してください –
Apperently正しい名前がある[BSTR](http://msdn.microsoft.com/en-us/library/windows/desktop/ms221069(V = VS.85 ).aspx)(人々はCの文字列以上のものを憎む) –
配列を渡すときに、関数内のサイズを簡単に決定する方法はNOTです。あなたは、特に冒険を感じている場合
あなたはどちらか がパラメータ または 使用 のstd ::ベクトルとして配列のサイズを渡すことができ<のstd :: string>は
を使用できsome advanced template techniques
一言で言えば、それは何かのように見える
template <typename T, size_t N>
void YourFunction(T (&array)[N])
{
size_t myarraysize = N;
}
はい私は現在何をしていますが、私はその余分なパラメータを削除したいと思います。ああよく – bubbles
また、std :: array
@bubbles 'int main(argc、char ** argv)'です。それが簡単だったならば、メインは異なって行われるだろう。 –
Ifすべての文字列がどれくらい長くtogatherに追加されたかを意味します。
int n=2;
int size=0;
char* array [n] = { "One", "Two"};
for (int i=0;i<n;++i)
size += strlen(array[i];
追加されました:
yesが現在行って何イムthatsのが、私はその余分 のparamaterを削除したかったです。ああ、 -
おそらく、これに対して悪い応答を得ようとしますが、あなたがそれを尊重したり、実際にポインタであると誤解している限り、常に最初のポインタを使用してサイズを格納することができます。
char* array [] = { (char*)2,"One", "Two"};
long size=(long)array[0];
for(int i=1; i<= size;++i)
printf("%s",array[i]);
またはあなたのアレイ終了NULL可能性
のchar *配列[] = { "1"、 "二"、(CHAR *)0}。
for(int i=0;array[i]!=0;++i)
{
printf("%s",array[i]);
}
ポインタから配列サイズを取得することはできません。 NULLポインタで配列を終了することができます。あなたの関数は、NULLポインタを検索してサイズを知ることができます。あるいは、単にNULLをヒットした入力の処理を止めるだけです...
Cはあなたの背中の背中をトリッキーにしています。
void foo(int array[]) {
/* ... */
}
void bar(int *array) {
/* ... */
}
これらの両方が同一である:
6.3.2.1.3:それは、sizeof演算子または単項&演算子のオペランドである または初期化するために使用されるリテラル文字列である場合を除き配列 の型 ''の配列 ''を持つ式は、配列オブジェクトの最初の要素を指し、左辺の値ではない型 ''型へのポインタ '' の式に変換されます。 配列オブジェクトにレジスタ記憶クラスがある場合、その動作は未定義です。
その結果、あなたは知らない、あなたは配列と呼ばれる 、単一 整数への配列の部分、またはポインタであればfoo()
またはbar()
、内側:
void foo(int *array)
:
int a[10];
int b[10];
int c;
foo(a);
foo(&b[1]);
foo(&c);
一部の人々は次のようにその機能を書くのが好き整数へのポインタであり、それ以外の場合は の整数が他にもあります。いくつかの人々は のような関数をのように書いて、 関数がそれに渡されることをよりよく思い出させたいと思っています。あまりにも長paramenterに沿って
にかかわらず、あなたは あなたの配列がどのくらいかを知りたい場合は、それをしたいどの方法を、あなたはいくつかのオプションを持っています。 (Think int main(int argc, char *argv
))。
NULL
でないように配列を設計します。 (char *s="almost a string";
またはexecve(2)
を考えてください)printf("%s%i", "hello", 10);
- 文字列は 他の引数を説明しますprintf(3)
はstdarg(3)
引数処理を使用しますが、 と同じように簡単に配列できます。)trivia: 'argv'はポイント1とポイント2の両方を行います。 – u0b34a0f6ae
は、代わりに `I`を使用して、新しいC++ 11のstd ::配列
http://www.cplusplus.com/reference/stl/array/
標準配列は、あなたが
char型のスターところで==文字ポインタ –
探しsizeメソッドを持っているを使用します「i」はおそらく「これは合理的な質問です」ヒューリスティックではないでしょう。 – sarnold