関数を書いているので、配列の長さを数える必要があります。
while(*substring){
substring++;
length++;
}
今、私がループを終了するとき。そのポインタは引き続き配列の先頭を指しますか?例えば:
配列が「こんにちは」の場合
ポインタをポイントしてループを終了すると、次のようになります。
HまたはNULL?
NULLを指している場合、Hを指すようにするにはどうすればよいですか?
関数を書いているので、配列の長さを数える必要があります。
while(*substring){
substring++;
length++;
}
今、私がループを終了するとき。そのポインタは引き続き配列の先頭を指しますか?例えば:
配列が「こんにちは」の場合
ポインタをポイントしてループを終了すると、次のようになります。
HまたはNULL?
NULLを指している場合、Hを指すようにするにはどうすればよいですか?
\0
C の文字列は、末尾にヌル文字 ( で示されます) を付けて格納されます。
したがって、次のように文字列を宣言できます。
char *str="Hello!";
メモリでは、これは次のようになりますHello!0
(または、各文字に対応する数字の文字列の後にゼロが続きます)。
コードは次のようになります。
substring=str;
length=0;
while(*substring){
substring++;
length++;
}
このループの終わりに到達すると、上記の文字のアドレス*substring
と等しくなり0
、substring
そのアドレスが含まれます。0
明示的に変更しない限り、 の値はsubstring
変更されません。
substring-length
ポインターは整数であり、そのように操作できるため、文字列の先頭を指すようにするには、 を使用できます。または、開始する前に場所を覚えておくこともできます。
beginning=str;
substring=str;
length=0;
while(*substring){
substring++;
length++;
}
substring=beginning;
配列のNULLターミネータを指しています。別の変数の位置を覚えておくか、ポインタから長さを引いてください。
一度移動したポインターは、別の場所に自動的に移動しません。そのため、while ループが終了すると、ポインターは NULL または文字列の終了シーケンスである正確に '\0' を指します。文字列の長さに戻るには、文字列の長さを計算するだけです。これは、長さ変数をインクリメントすることによって既に行っています。サンプルコード:
#include<stdio.h>
int main()
{
char name1[10] = "test program";
char *name = '\0';
name = name1;
int len = strlen(name);
while(*name)
{
name++;
}
name=name-len;
printf("\n%s\n",name);
}
お役に立てれば...
ループの最後に、 に*substring
なります0
。ループが終了する条件は次のとおりです。
while(*substring)
そうwhile( (the value pointed to by substring) is not equal to 0), do stuff
しかし、その後*substring
0 (文字列の末尾) になるため*substring
、NULL を指します。
Hに戻したい場合は、substring - length
ただし、記述している関数は既に存在します。それは入っstring.h
ていてsize_t strlen(const char*)
size_t
、ポインターのサイズの整数です (つまり、32 ビット OS では 32 ビット、64 ビット OS では 64 ビット)。