0

関数を書いているので、配列の長さを数える必要があります。

while(*substring){
    substring++;
    length++;
}

今、私がループを終了するとき。そのポインタは引き続き配列の先頭を指しますか?例えば:

配列が「こんにちは」の場合

ポインタをポイントしてループを終了すると、次のようになります。

HまたはNULL?

NULLを指している場合、Hを指すようにするにはどうすればよいですか?

4

4 に答える 4

1

\0C の文字列は、末尾にヌル文字 ( で示されます) を付けて格納されます。

したがって、次のように文字列を宣言できます。

char *str="Hello!";

メモリでは、これは次のようになりますHello!0(または、各文字に対応する数字の文字列の後にゼロが続きます)。

コードは次のようになります。

substring=str;
length=0;
while(*substring){
    substring++;
    length++;
}

このループの終わりに到達すると、上記の文字のアドレス*substringと等しくなり0substringそのアドレスが含まれます。0明示的に変更しない限り、 の値はsubstring変更されません。

substring-lengthポインターは整数であり、そのように操作できるため、文字列の先頭を指すようにするには、 を使用できます。または、開始する前に場所を覚えておくこともできます。

beginning=str;
substring=str;
length=0;
while(*substring){
    substring++;
    length++;
}
substring=beginning;
于 2013-02-08T05:37:58.043 に答える
0

配列のNULLターミネータを指しています。別の変数の位置を覚えておくか、ポインタから長さを引いてください。

于 2013-02-08T04:26:03.810 に答える
0

一度移動したポインターは、別の場所に自動的に移動しません。そのため、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);
}

お役に立てれば...

于 2013-02-08T05:15:35.427 に答える
0

ループの最後に、 に*substringなります0。ループが終了する条件は次のとおりです。

while(*substring)

そうwhile( (the value pointed to by substring) is not equal to 0), do stuff

しかし、その後*substring0 (文字列の末尾) になるため*substring、NULL を指します。

Hに戻したい場合は、substring - length

ただし、記述している関数は既に存在します。それは入っstring.hていてsize_t strlen(const char*) size_t、ポインターのサイズの整数です (つまり、32 ビット OS では 32 ビット、64 ビット OS では 64 ビット)。

于 2013-02-08T04:31:34.037 に答える