【发布时间】:2013-02-11 02:23:39
【问题描述】:
如何将这个字符串的第一个字符读取为整数?
char *p = argv[1];
谢谢!
【问题讨论】:
-
看看atoi函数
如何将这个字符串的第一个字符读取为整数?
char *p = argv[1];
谢谢!
【问题讨论】:
您的问题模棱两可。以下是三种可能的解释及其答案。
C 中“字符串”的每个字符实际上都是一个小整数,您可以通过简单地对数组进行索引来检索它。
int first = p[0];
如果您知道字符串的第一个字符是一个数字并且您希望它的值作为一个数字,您可以利用'0' 到@987654323 的字符代码这一事实@ 保证是连续的并且增加的:
int first_dv = -1;
if (p[0] >= '0' && p[0] <= '9')
first_dv = p[0] - '0';
如果您说错了,并且您确实想将 整个字符串 处理为十进制数,则可以使用 strtol 或 strtoul(如果该数字不应被解释为负数):
char *endp;
errno = 0;
long numeric_value = strtol(p, &endp, 10);
if (endp == p || *endp) {
fprintf(stderr, "junk after number: %s\n", endp);
} else if (errno) {
fprintf(stderr, "%s: invalid number (%s)\n", p, strerror(errno));
}
这些在<stdlib.h> 中声明。您不使用atoi 或sscanf 这样做,与许多其他人会告诉你的相反:atoi 不会告诉你号码后面是否有垃圾,sscanf不仅不会告诉你,它还允许你的程序在数值溢出时崩溃。
【讨论】: