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

时间:2018-04-17 00:32:47

标签: 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

1 个答案:

答案 0 :(得分:0)

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

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