相关疑难解决方法(0)

在C中将int打印为float

我正在为Little Endian使用Visual Studio TC编译器.以下是这段代码:

void main()
{    
    float c = 1.0;
    int a = 0x3F800000;
    int *ptr = (int *)&c;
    printf("\n0x%X\n", *ptr);
    printf("\na = %f", a);
    printf("\nc = %f", c);
    return;    
}
Run Code Online (Sandbox Code Playgroud)

输出是:

0x3F800000
a = 0.000000
c = 1.000000
Run Code Online (Sandbox Code Playgroud)

浮点值1.0为0x3F800000,并在内存中存储为00 00 80 3F,适用于Little Endian.将相同的值分配给int a.printf如何打印0.000000一段时间1.000000 for float c?我已经看到它在printf中使用%f打印时将所有整数值打印为0.000000.

另外,由于printf是可变参数函数,它如何知道寄存器中传递的值是int还是float?

c printf

7
推荐指数
3
解决办法
5566
查看次数

带有malloc的struct的C内存分配

我试图理解C中的结构的内存分配,但我坚持下去.

struct Person {
    char *name;
    int age;
    int height;
    int weight;
};
struct Person *Person_create(char *name, int age, int height, int weight)
{
    struct Person *who = malloc(sizeof(struct Person));
    assert(who != NULL);

    who->age = age;
    who->height = height;
    who->weight = weight;
    who->name = strdup(name);

    return who;
}
int main(int argc, char *argv[])
{
    struct Person *joe = Person_create("ABC", 10, 170, 60);
    printf("Size of joe: %d\n", sizeof(*joe));
    printf("1. Address of joe \t= %x\n", joe);
    printf("2. Address of Age \t= %x\n", …
Run Code Online (Sandbox Code Playgroud)

c memory malloc struct memory-management

5
推荐指数
3
解决办法
1282
查看次数

当size_t溢出时,"<"和">"运算符是否正常工作?

我正在研究一个更新20年代码的项目,其中许多问题都与整数溢出有关.我想确保我正确测试溢出,所以我写了一个测试程序.它的输出让我感到沮丧.这里是:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <limits.h>

int main (void) {

   size_t largerNum,Num;

   largerNum = 12;
   Num = UINT_MAX;

   printf("largerNum = %u\nNum = %u\nNum + 1 = %u\n", largerNum    , Num, Num + 1);

   largerNum = Num + 1;

   printf("largerNum now = %u\n", largerNum);

   if(largerNum < Num ){
      printf("largerNum overflowed to %u\n", largerNum);
   }
   else {
      printf("largerNum did not overflow: %u\n", largerNum);
   }

   printf("Is (0 < UINT_MAX)?\n");

   (0 < UINT_MAX)?printf("YES\n"):printf("NO\n");

   printf("Is (largerNum < Num)?\n");

   (largerNum < Num)?printf("YES\n"):printf("NO\n");

   return …
Run Code Online (Sandbox Code Playgroud)

c printf overflow size-t operator-keyword

3
推荐指数
1
解决办法
105
查看次数

将int作为float打印时printf的行为是什么?

我在windows7上使用dev cpp来编译我的代码.

int d = 0x12;
char* e = (char*)&d;
printf("%d %d\n", sizeof (int), sizeof (float));
printf("%p %p\n", &d, (float*)&d);
printf("%p %p %p %p %p\n", &d, &e[0], &e[1], &e[2], &e[3]);
printf(" %d | %x | %#1x | %#1x | %#1x |%p\n", d,  e[0], e[1], e[2], e[3], &e[0]);
getchar();

4 4 
0028FF40 0028FF40
0028FF40 0028FF40 0028FF41 0028FF42 0028FF43  
18 | 12 | 0 | 0 | 0 |0028FF40
Run Code Online (Sandbox Code Playgroud)

你看,如果我使用%d打印d,它打印4个字节的精细.但是,如果我使用下面的%f,它会在必须打印e的第一个字节的位置显示零.任何人都可以帮助解决为什么会这样 为什么e的内容取决于d的格式?

int d = 0x12;
char* e = (char*)&d;
printf("%d %d\n", sizeof …
Run Code Online (Sandbox Code Playgroud)

c floating-point int printf casting

1
推荐指数
1
解决办法
2539
查看次数

当我使用错误的格式说明符时会发生什么?

只是想知道当我在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)

c format-specifiers

1
推荐指数
1
解决办法
1865
查看次数

如果类型不符合类型说明符,printf如何工作?

int main()
{
printf("%c", "\n");

return 0;
}
Run Code Online (Sandbox Code Playgroud)

这里根据类型说明符,需要一个字符.但我们正在通过它const char *.我希望它会在代码块GNU GCC编译器中给我一个警告信息,但它没有给我任何警告和打印$字符.

为什么它没有给出任何类型的警告?

c printf

1
推荐指数
1
解决办法
1662
查看次数

为什么通过使用printf(%x)指针的值不同?

#include <stdio.h>
int main(void)
{
  int *ptr;
  printf("The Hex value of ptr is 0x%x",ptr);
  printf("The pointer value of ptr is %p",ptr);
}
Run Code Online (Sandbox Code Playgroud)

和输出有些不同,我不知道为什么

The Hex value of ptr is 0x24a77950
The pointer value of ptr is 0x7fff24a77950
Run Code Online (Sandbox Code Playgroud)

它显示ptr的值是一个十六进制整数,但是十六进制输出缺少part 7fff

这是printf格式问题还是其他?

c printf pointers

0
推荐指数
1
解决办法
1172
查看次数