Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 需要帮助更正-不稳定的atoi()输出_C_Gcc_Atoi - Fatal编程技术网

C 需要帮助更正-不稳定的atoi()输出

C 需要帮助更正-不稳定的atoi()输出,c,gcc,atoi,C,Gcc,Atoi,我正在尝试将一个int字符串转换为一个int数组 这是我的密码: int premaster1 = 3255859; char hashString[100]; int hashStringInput[1000]; sprintf(hashString,"%d%d%d",premaster1,300,350); printf("\n message going inside hash function = %s\n",hashString); for(i=0;i<strlen(has

我正在尝试将一个int字符串转换为一个int数组

这是我的密码:

int premaster1 = 3255859;
char hashString[100];
int hashStringInput[1000];

sprintf(hashString,"%d%d%d",premaster1,300,350);
printf("\n message going inside hash function = %s\n",hashString);


for(i=0;i<strlen(hashString)+1;i++){
    hashStringInput[i] = atoi(&hashString[i]);
    printf("%d",hashStringInput[i]);
}
这显然是错误的。我的期望输出应该是:

message going inside hash function = 3255859300350
3255859300350

我做错了什么?如何修复它?

您的代码毫无意义。
atoi
函数将字符串转换为整数。那你为什么要给它单独的字符呢

更新:您没有大整数。你有一串数字。数字表示从0到9(含0到9)之间的数字,它一点也不大。如果你有一个大整数,你永远不会调用
atoi
,因为这会把字符串转换成整数


您的代码,
sprintf(hashString,“%d%d%d”,premaster1300350)从三个整数创建一个十进制数字字符串。我想这就是为什么你叫它hashString。它不是一个大整数。不要将数字与其文本表示混淆。程序员必须把这些事情搞清楚,否则会带来痛苦。一半的解决方案是理解问题。

您正在将整个字符串传递给atoi:

"3255859300350" // First loop iteration
"255859300350"  // Second loop iteration
"55859300350"
"5859300350"
// And so on...
一种解决方案是在循环中使用临时缓冲区:

char temp [2] = { 0, 0 }; // Second element is for NUL character
temp[0] = hashString[i];  // Copy first char
hashStringInput[i] = atoi(temp);

另外,不要将
+1
与您的
strlen
一起使用,您不想转换NUL字符。

atoi
字符*
转换为整数。但是,整数大于可由
int
表示的最大值。这会导致未定义的行为(在您的示例中,
atoi
为第一个
int
返回0x7fffff)

而不是下面的语句

   hashStringInput[i] = atoi(&hashString[i]);
使用此语句

   hashStringInput[i] =hashString[i]-'0';
特别是在您的情况下,您可以如上所述使用,这将ascii数字转换为整数数字

  Example '3' to 3. 

因为我试图将hashString中的数字转换为hashStringInput的各个元素,将每个数字作为单独的元素,所以不要使用
atoi
atoi
函数专门用于将字符串(十进制数字)转换为整数,而不是数字,而不是字符。否则,我如何将像3255859300350这样的大型整数转换为整数数组的元素,每个元素作为单独的数字。您可以使用字符串中字符的ASCII值来查找其整数值,将其存储在整数数组中。@Anirudh您能给我一个如何执行的示例吗?好的,我尝试了这个
char z;z=哈希字符串[i];hashStringInput[i]=atoi(z)
现在我得到一个编译器错误:
警告:传递'atoi'的参数1会使指针不带强制转换从整数开始
@sukhvir它必须是
z[0]
,而不是
z
。关于你刚才删除的问题-我希望我没有拒绝你!只要试着为你的问题编写一个解决方案,如果你有任何问题,回来问一个更具体的问题!
  Example '3' to 3.