以下是项目Euler的程序。尝试将字符串转换为数字时,我收到分段错误;
main()
{
char me[] = "731671765313306249";
int counter = 0;
unsigned int product = 0;
unsigned int temp = 0;
char dup_me[5];
int j = 0;
printf("\n The String is:%s", me);
for(counter = 0; counter <= (strlen(me) - 5); counter ++)
{
temp = ((int)(me[counter]) * (int)(me[counter + 1]) * (int)(me[counter + 2]) * (int)(me[counter + 3]) * (int)(me[counter + 4]));
if (product < temp)
{
product = temp;
for(j = 0; j < 4; j ++)
{
dup_me[j] = me[counter + j];
printf("\nThis time: %d", atoi(dup_me[j]));
}
dup_me[j+1] = '\0';
}
}
printf("\n The products is ;%Ld", product);
printf("The producted numbers are:%s", dup_me);
return 0;
}
如果我评论这部分,它运行正常。
printf("\nThis time: %d", atoi(dup_me[j]));
我知道产品答案是错误的。它将字符转换为其ascii值。我需要有关此分段错误的帮助。我需要将该单个字符(数字)转换为整数值
由于
答案 0 :(得分:1)
我认为您的me[]
可能无效。如果要将me
用作缓冲区,请将其声明为char* me
。通过为其分配一个空白字符串,您实际上只创建了一个没有存储空间的字符串。
答案 1 :(得分:1)
函数atoi
的原型如下:int atoi(const char *nptr)
所以它需要一个指向char
的指针,并且你给它一个char
所以替换这一行:使用此printf("\nThis time: %d", atoi(dup_me[j]))
printf("\nThis time: %d", atoi(&dup_me[j]));
,一切都应该正常