關於c語言字串中sizeof指標的問題
#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是包含了空格和換行符的,檔案中有換行)