【发布时间】:2021-10-08 18:31:16
【问题描述】:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
char *filename = "Sayilar.txt";
FILE *fp = fopen("D:\\WWW\\Yazilim\\cLionProject\\untitled3\\Sayilar.txt", "r");
if (fp == NULL)
{
printf("Error: could not open file %s", filename);
return 1;
}
// reading line by line, max 256 bytes
const unsigned MAX_LENGTH = 256;
char buffer[MAX_LENGTH];
while (fgets(buffer, MAX_LENGTH, fp))
printf("%s\n", buffer);
// close the file
fclose(fp);
char *token;
char *dizi[] = {"1","2"};
long int dizi2[] = {1, 2};
int num1, num2;
token = strtok(buffer, "#");
printf("token = %s\n", token);
//num1 = strtol(token, NULL, 10);
num1 = atoi(token);
dizi[0] = token;
dizi2[0] = strtol(dizi[0], NULL, 10);
token = strtok(NULL, "#");
printf("token = %s\n", token);
//num2 = strtol(token, NULL, 10);
num2 = atoi(token);
dizi[1] = token;
dizi2[1] = strtol(dizi[1], NULL, 10);
printf("%s, %s\n",dizi[0], dizi[1]);
printf("%ld, %ld\n",dizi2[0], dizi2[1]);
printf("%d, %d",num1, num2);
return 0;
}
如何将两位数(char* 类型)转换为 int?
我想将值从标记转换为整数值 atoi 和 strtol 产生错误的结果
输出是
815102162524#622101830754
token = 815102162524
token = 622101830754
815102162524, 622101830754
2147483647, 2147483647
-941623716, -668427166
【问题讨论】:
-
这些数字太大了,不适合
int。 -
atoi()没有内置错误检查;strtol()确实如此。使用strtol()并检查错误!errno = 0; foo = strtol(text, &error_checking_pointer, 10); /* check errno, check error_checking_pointer */ -
我试过 long int,同样的问题
-
很确定问题不一样。
atoi正在转换为int,使用strtol。 -
您的输入文件是否真的包含像 815102162524 和 622101830754 这样的数字?这些真的是很大的数字。根据您的处理器和编译模型,它们甚至可能不适合
long int。它们是 40 位数字。您可能需要long long int和strtoll()。
标签: arrays c pointers atoi strtol