1. 程式人生 > >關於c語言字串中sizeof指標的問題

關於c語言字串中sizeof指標的問題

#include<stdio.h>
#include<time.h>
#include<assert.h>
int main()
{
  FILE *f1=fopen("C:/Users/yangb/Desktop/11.txt","r");
  assert(f1);
  char ch[100];
  fgets(ch,100,f1);
  printf("%s\n",ch);
  printf("%s\n",ch+1);
  char* p=ch;
  printf("%d\n", sizeof(ch));
  printf("%d\n", sizeof(p));
  printf("%d\n", sizeof(ch+1));

  printf("%d\n",strlen(ch));
  printf("%d\n",strlen(ch+1));

return 0;

}

執行後其結果為:

1 2 3 4 5

 2 3 4 5

100
4
4
10
9

Process returned 0 (0x0)   execution time : 0.200 s
Press any key to continue.

只有定義字元陣列的頭指標裡面含有這個陣列字元資訊,比如陣列長度,其他的都特定指陣列中的一個元素。

printf(“%s”, p)是把指標p指向的內容以及他後面指向的內容截止到' \0'全部打印出來。

fgets(ch, 100, f1)是把f1的一行最多99個字元放入字元陣列ch中,其中第100個字元是'\0'。

如果這裡把 字元陣列改為字元指標:

#include<stdio.h>
#include<time.h>
#include<assert.h>
int main()
{
  FILE *f1=fopen("C:/Users/yangb/Desktop/11.txt","r");
  assert(f1);
  char* ch=(char*)malloc(100*sizeof(char));
  fgets(ch,100,f1);
  printf("%s\n",ch);
  printf("%s\n",ch+1);
  char* p=ch;
  printf("%d\n", sizeof(ch));
  printf("%d\n", sizeof(p));
  printf("%d\n", sizeof(ch+1));

  printf("%d\n",strlen(ch));
  printf("%d\n",strlen(ch+1));

return 0;
}

執行後其結果變為了:

1 2 3 4 5

 2 3 4 5

4
4
4
10
9

Process returned 0 (0x0)   execution time : 0.194 s
Press any key to continue.


由此可見 想知道一個串的大小,如果用sizeof的話只能是字元陣列的首地址ch,雖然p指向ch,但p不包含ch中的資訊,sizeof(p)是一個字元的大小,並非這個陣列的

我們可以用strlen來確定字串的長度(10是包含了空格和換行符的,檔案中有換行)