开天辟地的卷毛 2022-05-14 00:14 采纳率: 85.4%
浏览 40
已结题

c语言关于使用strtol()的问题


/* strcnvt.c -- 使用strtol() */
#include<stdio.h>
#include<stdlib.h>
#include"s_gets.h"
#define LIM 30

int main()
{
    char number[LIM];
    char* end;
    long value;

    puts("Enter a number (empty line to quit):");
    while (s_gets(number, LIM) && number[0] != '\0')
    {
        value = strtol(number, &end, 10);   /* 十进制 */
        printf("base 10 input, base 10 output: %ld stopped at %s (%d)\n", value, end, *end);
        value = strtol(number, &end, 16);   /* 十六进制 */
        printf("base 16 input, base 16 output: %ld stooped at %s (%d)\n", value, end, *end);
        puts("Next number:");
    }
    puts("Bye!\n");
    return 0;
}

#include<stdio.h>
char* s_gets(char* st, int n)
{
    char* ret_val;
    int i = 0;

    ret_val = fgets(st, n, stdin);
    if (ret_val)
    {
        while (st[i] != '\n' && st[i] != '\0')
            i++;
        if (st[i] == '\n')
            st[i] = '\0';
        else
            while (getchar() != '\n')
                continue;
    }
    return ret_val;
}
/* 输出结果 */
Enter a number (empty line to quit):
10atom
base 10 input, base 10 output: 10 stopped at atom (97)
base 16 input, base 16 output: 266 stooped at tom (116)
Next number:

Bye!

想问一下,为什么会打印出10 atom 97。266, tom 166
尤其是end用%d输出,我觉得是a和t,但是不懂为什么要将后面的字符也打印出来

  • 写回答

1条回答 默认 最新

  • a5156520 2022-05-14 11:07
    关注

    下面是我的理解,供参考:
    strtol函数把第一个参数指向的字符串转换为第三个参数指定的进制的数字输出,第二个参数是第一个参数的数字的下一个字符的指针的指针。
    参考:C 库函数 – strtol() | 菜鸟教程


    所以输入 10atom,即调用strol("10atom", &end, 10) ,把字符串“10atom”里的数字转换为10进制的数字就是 10,
    然后指向数字的下一个字符a的指针,按%s打印即输出字符a位置到字符串结尾,即“atom”, %d打印(*end),即打印字符a,他的ASCII码是97,所以输出97。(如果按%c打印就是字符a)。


    同理,调用strol("10atom", &end, 16) ,把字符串“10atom”里的数字(10a)转换为16进制的数字就是 266,
    然后指向数字的下一个字符t的指针,按%s打印即输出字符位置到字符串结尾,即“tom”, %d打印(*end),即打印字符t,他的ASCII码是116,所以输出116。(如果按%c打印就是字符t)。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 7月5日
  • 已采纳回答 6月27日
  • 创建了问题 5月14日

悬赏问题

  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)