1

如何将字符串转换为长长

int main() {
  char **ptr;
  long long val1 = strtoumax("1234567890123456",ptr, 10);
  printf("%ull\n",val1);
}

它的印刷品只有 1015724736ll。我怎样才能让它打印 1234567890123456

4

4 回答 4

4

使用strtoll, strtoumax 用于转换为 uintmax_t,通常不是 long long。

请注意,您的 printf 格式说明符也是错误的,没有“%ull”之类的东西。"%ull" 将被解释为格式说明符 "%u" 和普通字符串 "ll"。传递 long long 以格式化为 unsigned int("%u") 可能会给您带来不可预知的结果。

你需要使用

 printf("%lld\n", val1);

如果你有一个 unsigned long long,你会使用 "%llu"

于 2013-08-23T12:10:05.470 回答
2
  1. 使用unsigned long long而不是long long

  2. 使用strtoull而不是strtoumax

  3. 利用printf("%llu\n",val1);

于 2013-08-23T12:13:19.063 回答
1

有很多问题。

而不是printf("%ull\n",val1);使用printf("%llu\n",val1);. 把“ll”放在第一位。

ptr应该是char *ptr然后foo(..., &ptr, 10)。(这可以防止坏事,因为此参数需要指向您拥有的内存。)

long long val1应该是unsigned long long val1-您似乎想在其余代码中使用无符号整数

strtoumax应该是strtoull- 以匹配您的目的地类型unsigned long long

于 2013-08-23T12:11:46.827 回答
0

您可以使用strtoll.

对于 中的格式说明符,printfuse代表无符号,但不是。%lluval1

如果unsigned long long是你想要的,val1那么声明,并strtoull相应地使用。

于 2013-08-23T12:13:35.787 回答