0

所以这是我所有的程序代码:

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

typedef struct {
    unsigned char adr;
    unsigned char type;
} stru;

int main (int argc, char *argv[]){

    while(1){

    stru data;

    data.adr = 5;
    data.type = 4;

    printf("Address: %c, Type: %c \n", data.adr, data.type);

    }

    return 0;   
}

我用“gcc testprog.c -o testprog”编译它。

输出如下:

Address: , Type:
Address: , Type:
Address: , Type:
Address: , Type:
Address: , Type:
Address: , Type:
Address: , Type:
Address: , Type:
Address: , Type:
Address: , Type:
Address: , Type:
^CAddress: , Type:
PuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTY^C

我在 Virtual Box 上运行 Ubuntu 12.04 并通过 PuTTY SSH 客户端访问它我最近安装了 0MQ 库,但我认为这不会导致错误。

如果有人对此有解决方案,请告诉我。谢谢你。

4

3 回答 3

4

我认为您想%u在格式字符串中使用而不是%c.

%c将输入解释为ASCII 字符值,因此打印 4 或 5 with%c将打印出控制字符范围内的内容。打印出控制字符可能是导致输出底部所有奇怪内容的原因。

%u需要一个无符号整数作为输入,它会在打印之前将整数转换为字符串。

我建议您阅读有关-style 格式字符串的教程参考printf,以熟悉许多格式说明符之间的差异。

于 2012-09-26T16:45:27.110 回答
0

无限循环看起来毫无意义。

如果您想将unsigned char视为一个小整数,则需要使用合适的格式代码打印它,例如%u.

于 2012-09-26T16:48:37.937 回答
0

您当前正在使用%c说明符将值 4 和 5 打印为字符。由于 4 和 5 不是可打印的 Ascii 字符,因此终端不显示任何内容。如果您想查看打印的值“4”和“5”,请将代码修改为,printf("Address: %u, Type: %u \n", data.adr, data.type);因为它们是无符号值。

于 2012-09-26T16:50:35.133 回答