How do I tell if the c function atoi failed or if it was a string of zeros?

后端 未结 6 1474
悲&欢浪女
悲&欢浪女 2020-11-28 09:52

When using the function atoi (or strtol or similar functions for that matter), how can you tell if the integer conversion failed or if the C-string

6条回答
  •  半阙折子戏
    2020-11-28 10:16

    The proper function (as long as you are insisting on using C-style functions) is strtol and the conversion code might look as follows

    const char *number = "10"; /* for example */
    
    char *end;
    long value = strtol(number, &end, 10); 
    if (end == number || *end != '\0' || errno == ERANGE)
      /* ERROR, abort */;
    
    /* Success */
    /* Add whatever range checks you want to have on the value of `value` */
    

    Some remarks:

    strtol allows (meaning: quietly skips) whitespace in front of the actual number. If you what to treat such leading whitespace as an error, you have to check for it yourself.

    The check for *end != '\0' makes sure that there's nothing after the digits. If you want to permit other characters after the actual number (whitespace?), this check has to be modified accordingly.

    P.S. I added the end == number check later to catch empty input sequences. "All whitespace" and "no number at all" inputs would have been caught by *end != '\0' check alone. It might make sense to catch empty input in advance though. In that case end == number check will/might become unnecessary.

提交回复
热议问题