【发布时间】:2015-02-24 14:37:31
【问题描述】:
我编写了一个程序来从一个文件中获取所有电话号码,该文件具有其他文本,例如 at 命令和来自其他子进程的其他错误。在这里,当我尝试使用用户定义的函数将字符串转换为整数时,我遇到了问题。存储在函数中的转换值没有正确返回到主程序,而是返回一些不寻常的值,并且每次执行似乎都是相同的。这让我很惊讶。谁能给我建议。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char lic[128];
unsigned long long sum=0ULL;
unsigned long long stringtoint(char str[])
{
int i=0;
sum=0;
if(str[strlen(str)]!='\0')
return -1;
//puts("Im in function");
while(str[i]!='\0'){
//printf("- %c -\n",str[i]);
if(str[i] >= 48 && str[i] <= 57){
sum = sum*10 + (str[i] - 48);
//printf("%c and %llu\n",str[i],sum);
}
i++;
}
if(sum>0)
printf("\nIn function passed string is %s and integer value is %llu\n",str,sum);
return sum;
}
FILE *file;
int main(){
//long long int inte;
int64_t inte; file = fopen("receive","r");
if(file!=NULL)
while(fscanf(file,"%s",lic)!=EOF){
inte = 0;
inte=stringtoint(lic);
if(inte !=0){
printf("In Main %llu is the value of the string %s",inte,lic);
if(inte==sum)
printf("\n%llu and %llu are same\n",inte,sum);
}
}
printf("\n");
fclose(file);
return 0;
}
我在这个程序中得到的结果如下所示。
在函数中传递的字符串是 8939095683 和整数值是 8939095683 在 Main 349161091 中是字符串 8939095683 的值
shadeerariff@shameerariff-Satellite-L450:~/Workinffolder/ivr/IVRReporting$ ./datadecoder
在函数中传递的字符串是 8939095683 和整数值是 8939095683 在 Main 349161091 中是字符串 8939095683 的值
shadeerariff@shameerariff-Satellite-L450:~/Workinffolder/ivr/IVRReporting$ ./datadecoder
在函数中传递的字符串是 8939095683 和整数值是 8939095683 在 Main 349161091 中是字符串 8939095683 的值
需要您的宝贵意见,提前感谢您的支持。
【问题讨论】:
-
欢迎来到 StackOverflow。请提供一个最小的测试用例,这是一个程序,您可以在其中删除不会造成问题的所有内容。这将有助于人们查看您的问题并节省他们的时间。
-
你求和一个
long long,但返回一个int,你为什么不返回一个long long? -
感谢 Alter Mann 它现在可以工作了这是我的一个愚蠢的错误,我没有注意到。
-
@Shameerariff:想一想:这里的愚蠢错误是您尝试将电话号码解析为整数。例如,如果您在汉堡拨打德国号码,则电话号码为
0049 40 6776776;整数转换的结果将是49406776776,它看起来与本地号码完全一样。不要那样做!只需按原样坚持使用 char 字符串即可;它甚至不会使用那么多内存(即使应用了固定长度)。 -
@MarcusMüller:您是否假设国际访问前缀是
00?如果你想强调毫无根据的假设的危险,你应该小心。您的意思是+49 40 6776776吗?但是,是的,电话号码最好作为字符串处理。甚至不要假设它们都是数字,如@987654329@ 所示。