将计算字符串转换为 uint32_t,而不将其复制到 c 中的 char[] 缓冲区中

标签 c

我正在尝试将子字符串转换为整数,但我得到了这个输出

    int main()
{
    char buf[50] = "210-567-12-2040-34567890.txt";
    char* pStart = buf;
    char* pCurrent = buf;
    while(*pCurrent != '\0')
    {
        if (*pCurrent == '-' || *pCurrent == '.') 
        {
            uint32_t val = strtoul(pStart, NULL, 10); 
            pStart = pCurrent+1;
            printf("%ul\n",val);
        }
        ++pCurrent;
    }
    return 0;
}

我得到这个输出

210l                                                                                                                                   
567l                                                                                                                                   
12l                                                                                                                                    
2040l                                                                                                                                  
34567890l

为什么里面有一个l

最佳答案

这里的一些答案正是您正在寻找的:What is the difference between char s[] and char *s?

简短的回答是,作为函数参数,两者之间没有区别。您可以将 char* pStart 变量传递到 strtoul 中,就像将 char str[20] 变量传递到其中一样。这将使它直接从 pStart 指向的任何内存地址读取字符串,无需先复制到数组中。

关于将计算字符串转换为 uint32_t,而不将其复制到 c 中的 char[] 缓冲区中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49868094/

相关文章:

C++ 头文件包装器库

c - 不兼容指针赋值的技术合法性

c - 我一次可以在 TCP 套接字上写入多少字节?

c - 使用 C 和并行化在 R 中快速关联

c - 在c中,其他文件中定义的函数如何进行实际链接

c - 为什么我们无法访问主机端的设备内存?

c - gcc 的正确选项顺序是什么?该顺序的重要性是什么?

c - 我们如何检测文件中的 SUB 字符?

我们可以在 getopt 中添加更多选项吗?

c - 尝试从文件中打印数组