【发布时间】:2021-07-07 01:22:43
【问题描述】:
以下代码的主输入为 1-5,这是代码将运行的次数。代码打印出指针分配前后的地址。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv)
{
char character ;
int integer ;
char string[50] ;
float fp ;
int i, x = 5 ;
char* cPointer ;
int* intPointer ;
char* sPointer ;
float* fpPointer ;
if (argc > 1)
{
x = atoi(argv[1]) ;
}
else if (x > 5 || x < 1)
{
printf("Invalid number, please input a number between 1-5!") ;
exit (1) ;
}
int count = 0;
while (count <= x)
{
printf("Please enter a character: ") ;
scanf(" %c", &character) ;
printf("Please enter an integer: ") ;
scanf("%d", &integer) ;
printf("Please enter a string: ") ;
scanf("%s", string) ;
printf("Please enter a floating point:") ;
scanf("%f", &fp) ;
printf("\n\nCharacter Pointer: %p", cPointer) ;
printf("\nInteger Pointer: %p", intPointer) ;
printf("\nString Pointer: %p", sPointer) ;
printf("\nFloating Point Pointer: %p", fpPointer) ;
printf("\n\nCharacter: %c", character) ;
printf("\nInteger: %d", integer) ;
printf("\nString: %s", string) ;
printf("\nFloating Point: %.2f", fp) ;
cPointer = &character ;
intPointer = &integer ;
fpPointer = &fp ;
sPointer = string ;
printf("\n\nCharacter Pointer: %p", cPointer) ;
printf("\nInteger Pointer: %p", intPointer) ;
printf("\nString Pointer: %p", sPointer) ;
printf("\nFloating Point Pointer: %p\n\n", fpPointer) ;
count++ ;
}
return 0;
}
问题出在输出上,第一次尝试得到的不是浮点的指针地址,而是(nil)
Character Pointer: 0x7f0eeed0c1f8
Integer Pointer: 0x7f0eef2d6000
String Pointer: 0x7f0eef2e91c8
Floating Point Pointer: (nil)
Character: a
Integer: 1
String: aa
Floating Point: 1.10
Character Pointer: 0x7ffe236e563f
Integer Pointer: 0x7ffe236e5640
String Pointer: 0x7ffe236e5670
Floating Point Pointer: 0x7ffe236e5644
Please enter a character: b
Please enter an integer: 2
Please enter a string: bb
Please enter a floating point:2.2
Character Pointer: 0x7ffe236e563f
Integer Pointer: 0x7ffe236e5640
String Pointer: 0x7ffe236e5670
Floating Point Pointer: 0x7ffe236e5644
Character: b
Integer: 2
String: bb
Floating Point: 2.20
Character Pointer: 0x7ffe236e563f
Integer Pointer: 0x7ffe236e5640
String Pointer: 0x7ffe236e5670
Floating Point Pointer: 0x7ffe236e5644
【问题讨论】:
-
如果您打印
*cPointer会发生什么情况,而其他Pointers 也是如此? (提示:您没有初始化 任何 个Pointer变量。) -
@ScottHunter 我不完全确定你的意思......但是,变量通过 scanf 被赋予了一个值,并且指针在之前和之后确实有一个地址。我只是因为一些奇怪的原因而错过了浮点数。
-
@Jon 指针一开始有一个未初始化的值,所以你在第一次运行时打印的值是没有意义的。
-
您实际上在
printf()中调用了UB。看到这个:stackoverflow.com/questions/24867814/…
标签: c pointers crash runtime-error scanf