我寫了一些東西來熟悉指標。
void print_line(int64_t number, char *string)
{
(void)number;
(void)string;
printf("%d %s \n", number, *string);
return;
}
int main()
{
print_line(42, "Hello World!");
return 0;
}
我希望結果是 42 和“Hello World!”。但是它是 42(空)。我假設我以錯誤的方式使用了指標。我的錯誤在哪里?為什么地址是空的?
非常感謝!
uj5u.com熱心網友回復:
第一個引數具有型別 int64_t
void print_line(int64_t number, char *string)
另一方面,轉換說明符%d用于輸出型別為 的數字int。所以由于這個原因這個電話
printf("%d %s \n", number, *string);
已經不正確并呼叫未定義的行為,因為錯誤的轉換說明符用于型別的物件int64_t。
如果函式的第一個引數具有型別,或者在最后一種情況下,如果型別的值可在型別中表示,則可以%d在呼叫中使用轉換說明符。printfintunsigned intunsigned intint
此外,當您傳遞具有型別的運算式時,轉換說明符%s需要型別的指標。char **stringchar
你需要的是包含標題 <inttypes.h>
#include <inttypes.h>
并改變printf喜歡的呼叫
printf( "%" PRId64 " %s\n", number, string );
這是一個演示程式。
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>
void print_line( int64_t number, const char *string )
{
printf( "%" PRId64 " %s\n", number, string );
}
int main(void)
{
print_line( 42, "Hello World!" );
return 0;
}
程式輸出是
42 Hello World!
uj5u.com熱心網友回復:
printf %s需要一個指向字串第一個字符的指標。就是這樣string。
printf("%d %s\n", number, *string);
應該
printf("%d %s\n", number, string);
確保啟用編譯器的警告(例如-Wall -Wextra -pendatic使用 gcc 和 glang)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/336475.html
