例如:
sizeof(char*)返回4一样int*,long long*,我已经竭尽所能.这有什么例外吗?
毕竟,这两个陈述都做同样的事情......
int a = 10;
int *b = &a;
printf("%p\n",b);
printf("%08X\n",b);
Run Code Online (Sandbox Code Playgroud)
例如(具有不同的地址):
0012FEE0
0012FEE0
Run Code Online (Sandbox Code Playgroud)
根据需要格式化指针是微不足道的%x,那么是否有一些很好的%p选择?
我的代码是:
#include <stdio.h>
#include <string.h>
void main()
{
char string[10];
int A = -73;
unsigned int B = 31337;
strcpy(string, "sample");
// printing with different formats
printf("[A] Dec: %d, Hex: %x, Unsigned: %u\n", A,A,A);
printf("[B] Dec: %d, Hex: %x, Unsigned: %u\n", B,B,B);
printf("[field width on B] 3: '%3u', 10: '%10u', '%08u'\n", B,B,B);
// Example of unary address operator (dereferencing) and a %x
// format string
printf("variable A is at address: %08x\n", &A);
Run Code Online (Sandbox Code Playgroud)
我在linux mint中使用终端编译,当我尝试使用gcc编译时,我收到以下错误消息:
basicStringFormatting.c: In function ‘main’:
basicStringFormatting.c:18:2: warning: …Run Code Online (Sandbox Code Playgroud) 或者换句话说:可能错误printf/ fprintf十进制整数(%d,%u,%ld,%lld)格式化字符串导致程序崩溃或导致未定义的行为?
Cosinder以下代码行:
#include <iostream>
#include <cstdio>
int main() {
std::cout << sizeof(int) << std::endl
<< sizeof(long) << std::endl;
long a = 10;
long b = 20;
std::printf("%d, %d\n", a, b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
32位架构的结果:
4
4
10, 20
Run Code Online (Sandbox Code Playgroud)
64位架构的结果:
4
8
10, 20
Run Code Online (Sandbox Code Playgroud)
在任何情况下,程序都会打印出预期的结果.我知道,如果long值超出int范围,程序会打印错误的数字 - 这很难看,但不影响程序的主要目的 - 但除此之外,是否会发生意外情况?
只是想知道当我在C中使用错误的格式说明符时会发生什么?
例如:
x = 'A';
printf("%c\n", x);
printf("%d\n", x);
x = 65;
printf("%c\n", x);
printf("%d\n", x);
x = 128;
printf("%d\n", x);
Run Code Online (Sandbox Code Playgroud)