【问题标题】:integers in char arraychar 数组中的整数
【发布时间】:2013-09-09 07:00:18
【问题描述】:

我想知道整数在 char 数组中是如何处理的。例如,当我们对单个字符使用scanf()printf() 函数时,我们使用"%c",对于字符串值"%s" 等。我使用"%s" 来打印带有整数的char 数组。但它会打印一些垃圾字符作为输出。

【问题讨论】:

  • @UchiaItachi 对于 'struct' 、链接列表和其他东西有点模糊。基本上我的要求是,用户输入一个电话号码>>它被分配给一个变量>>这被复制到结构变量>>并且当用户想要搜索给定名称的电话号码时,它应该打印该号码。我不能使用 int 变量来获取电话号码,因为它以数字 0 开头。
  • 也许将电话号码存储为字符串(字符数组)而不是整数类型?您可以告诉 printf 用前导零填充一个整数,但您仍然需要知道应该有多少个前导零。
  • @patmanpato 是的,这正是我所做的。但是当使用("%s",&num1) 打印电话号码时,它会打印一些垃圾字符。 ://
  • %s 需要一个字符串,所以你会得到垃圾,或者更糟糕的是,如果你给它一个 int。使用 printf 格式化的一些示例:codingunit.com/…

标签: c int printf arrays


【解决方案1】:

直接使用整数变量时,它很简单:

int i = 7;
printf("%d", i);

在处理字符数组时,您可以创建辅助函数,在 char* int 之间进行转换,从而获得更便携的解决方案:

int toInt(unsigned char* p) {
    return *(p + 0) << 24 | *(p + 1) << 16 | *(p + 2) << 8 | *(p + 3);
}
...
unsigned char arr[4] = {0,0,0,4};
int i = toInt(&arr[0]);
printf("%d", i);

应该打印4

您也可以使用简单的演员表:

unsigned char arr[4] = {0,0,0,4};
int* i = &arr[0];
printf("%d", *i);

但该解决方案将取决于字节序。在 ideone.com 上打印67108864

【讨论】:

  • 对于这样的东西,它确实应该是unsigned char,否则符号扩展会有问题。
  • @unwind:确实是好点,我没有考虑它,因为我更专注于字节序。
  • @LihO 谢谢!我实际上不能采用第一种解决方案,因为我的要求是输入一个电话号码(以数字 0 开头)。如果我要使用第二种解决方案,我将如何使用“strncpy”功能?请简化您的答案^_^我是c新手。
【解决方案2】:

如果您知道每个电话号码的长度相同,您可以用零填充号码的前面。例如将每个数字填充到 10 位,必要时在前面加上 0:

int d = 123456789;
printf("%d\n", d); // prints 123456789
printf("%010d\n", d); // prints 0123456789

d = 12345678;
printf("%010d\n", d); // prints 0012345678 :-(

不看代码就很难猜出更多的需求。有很多用 printf 格式化的例子,例如:http://www.codingunit.com/printf-format-specifiers-format-conversions-and-formatted-output

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-27
    • 2019-06-20
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    相关资源
    最近更新 更多