在c中的unsigned short int中分配零
assign zero in unsigned short int in c
我尝试将零分配给名为列表的结构中的字段
list.ultimo = 0;
但是当我使用 printf
printf("%d", list.ultimo);
我得到结果
32766
但是当我添加
unsigned short int cero = 0;
printf的结果是正确的,不管那个不使用cero。为什么?
lista.h
#ifndef LISTA_H
#define LISTA_H
typedef struct{
elemento lista[TAMANOMAX];
unsigned short int ultimo;
}LISTA;
void Insertar(elemento, unsigned short int posicion, LISTA);
#endif
lista.c
#include<stdio.h>
typedef short int elemento;
#ifndef TAMANOMAX
#define TAMANOMAX 10
#endif
#include"lista.h"
void Insertar(elemento x, unsigned short int p, LISTA lista){
if (lista.ultimo >= TAMANOMAX){
puts("full list");
printf("%hu",lista.ultimo);
}
}
main.c
#include<stdio.h>
typedef unsigned short int elemento;
#define TAMANOMAX 4
#include"lista.h"
int main(){
LISTA esferas;
esferas.ultimo = 0;
Insertar(2,0,esferas);
printf("\n%hu\n", esferas.ultimo);
return 0;
}
结果是
$gcc -Wall lista.c main.c
full list
32765
0
我是新手,我现在很慢,很抱歉延迟
使用%hd
打印short int
,使用%hu
打印unsigned short int
。 %d
用于 int
.
编辑:既然您已经发布了完整代码,TAMANOMAX
似乎在 lista.c
中设置为 10
,但在 [=] 中设置为 4
20=],导致 main()
函数与 Insertar
函数不兼容。您应该在所有文件中具有相同的值。如果您想使用不同的数组长度,请在 LISTA
结构中添加一个 length
成员。但是 TAMANOMAX
绝对应该在任何地方都一样,否则你实际上使用的是不同的数据类型,你的程序将无法运行。
使用不匹配的格式说明符和参数类型调用 undefined behavior。
引用 C11
标准,章节 §7.21.6.1,fprintf()
函数
[..] If any argument is
not the correct type for the corresponding conversion specification, the behavior is
undefined.
和关于 %d
格式说明符,
d,i
The int
argument [....]
所以,%d
期望 int
。
根据您的问题标题,ultimo
是 unsigned short int
并且您正在使用 %d
打印该值。
您应该使用 %hu
来打印 unsigned short int
。
我尝试将零分配给名为列表的结构中的字段
list.ultimo = 0;
但是当我使用 printf
printf("%d", list.ultimo);
我得到结果
32766
但是当我添加
unsigned short int cero = 0;
printf的结果是正确的,不管那个不使用cero。为什么?
lista.h
#ifndef LISTA_H
#define LISTA_H
typedef struct{
elemento lista[TAMANOMAX];
unsigned short int ultimo;
}LISTA;
void Insertar(elemento, unsigned short int posicion, LISTA);
#endif
lista.c
#include<stdio.h>
typedef short int elemento;
#ifndef TAMANOMAX
#define TAMANOMAX 10
#endif
#include"lista.h"
void Insertar(elemento x, unsigned short int p, LISTA lista){
if (lista.ultimo >= TAMANOMAX){
puts("full list");
printf("%hu",lista.ultimo);
}
}
main.c
#include<stdio.h>
typedef unsigned short int elemento;
#define TAMANOMAX 4
#include"lista.h"
int main(){
LISTA esferas;
esferas.ultimo = 0;
Insertar(2,0,esferas);
printf("\n%hu\n", esferas.ultimo);
return 0;
}
结果是
$gcc -Wall lista.c main.c
full list
32765
0
我是新手,我现在很慢,很抱歉延迟
使用%hd
打印short int
,使用%hu
打印unsigned short int
。 %d
用于 int
.
编辑:既然您已经发布了完整代码,TAMANOMAX
似乎在 lista.c
中设置为 10
,但在 [=] 中设置为 4
20=],导致 main()
函数与 Insertar
函数不兼容。您应该在所有文件中具有相同的值。如果您想使用不同的数组长度,请在 LISTA
结构中添加一个 length
成员。但是 TAMANOMAX
绝对应该在任何地方都一样,否则你实际上使用的是不同的数据类型,你的程序将无法运行。
使用不匹配的格式说明符和参数类型调用 undefined behavior。
引用 C11
标准,章节 §7.21.6.1,fprintf()
函数
[..] If any argument is not the correct type for the corresponding conversion specification, the behavior is undefined.
和关于 %d
格式说明符,
d,i
Theint
argument [....]
所以,%d
期望 int
。
根据您的问题标题,ultimo
是 unsigned short int
并且您正在使用 %d
打印该值。
您应该使用 %hu
来打印 unsigned short int
。