我正在嘗試使用 strlen() 輸出字串的長度。但我想通過指標來做到這一點。
這是我嘗試過的:`
#include <stdio.h>
#include <string.h>
int main()
{
char a[]="wel";
int *p;
p=&a;
printf("%d\n",strlen(*p));
}
該圖顯示了我在編譯時遇到的錯誤:
然后將 *p 的代碼宣告更改為 *p[]:
#include <stdio.h>
#include <string.h>
int main()
{
char a[]="wel";
int *p[];
p=&a;
printf("%d\n",strlen(*p));
}
但是后來我收到一個錯誤“'p'的存盤大小未知。” 我還缺少什么?
uj5u.com熱心網友回復:
除了在一些有限的情況下(特別是sizeof),陣列在使用時會降級為指向其第一個元素的指標。所以這就是你需要的:
char *p = a; // Same as `p = &(a[0])`
printf( "%zu\n", strlen( p ) );
請注意,strlen回傳 asize_t和%zu是正確的格式說明符。
uj5u.com熱心網友回復:
a用字串字面量初始化的陣列的宣告
char a[]="wel";
相當于
char a[4]="wel";
所以運算式&a 有型別char ( * )[4]但指標p有型別int *
int *p;
并且指標型別之間沒有隱式轉換。
再次,該函式strlen需要一個型別的指標,char *但您傳遞的是該型別的運算式int
printf("%d\n",strlen(*p));
該函式的回傳型別strlen也是size_t. 所以至少你必須使用轉換說明符zu而不是d在printf.
看來你的意思是以下
#include <stdio.h>
#include <string.h>
int main( void )
{
char a[] = "wel";
char *p;
p = a;
printf( "%zu\n", strlen( p ) );
}
在這個賦值陳述句中
p = a;
a右側運算式中使用的陣列被隱式轉換為指向其型別的第一個元素的指標char *。
至于第二個程式,那么您宣告了一個指標陣列而不指定元素的數量
int *p[];
這樣的宣告是無效的。
此外,陣列沒有您嘗試使用的賦值運算子
p=&a;
所以整個第二個程式沒有意義。
如果要將運算式&a用作初始化程式,則必須將指標p宣告為
char ( *p )[4];
或者
char ( *p )[sizeof( a )];
在這種情況下,程式可以看起來例如以下方式
#include <stdio.h>
#include <string.h>
int main( void )
{
char a[] = "wel";
char ( *p )[sizeof( a )];
p = &a;
printf( "%zu\n", strlen( *p ) );
}
uj5u.com熱心網友回復:
p 不是字串,它是指向 int 型別的指標。為什么不使用
printf("%d\n",strlen(a));
然后使用
char a[4]="wel";
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/525243.html
