【发布时间】:2017-09-12 18:28:25
【问题描述】:
在读取文件或接受输入时,将字符串(字符数组)转换为 int 会很好。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 500
int main(void)
{
FILE* pfile;
pfile = fopen("/tmp/code","r"); //open file
char *stringBuffer = (char *)malloc(SIZE * sizeof(char)); //dynamic string
char ch;
int i = 0;
ch = getc(pfile); //read file
while(ch != EOF) //until end
{ //pass into string
counter++;
stringBuffer[i] = ch;
ch = getc(pfile);
i++;
}
fclose(pfile); //resize string
int stringSize = (int)(sizeof(stringBuffer)/sizeof(char));
stringBuffer = (char *)realloc(stringBuffer,(stringSize * sizeof(char)));
printf("the string works: %s \n",stringBuffer);
int intger = (int)*stringBuffer; //this is what i want to work!!!!
//but more like
//int intger = (int)stringBuffer;
printf("the intger doesn't work if more than 1 decimal place: %i \n",(intger - 48));
free(stringBuffer);
return(0);
}
~
~
我确实意识到我可以 1.cast char 为 int & 从 ASCII 转换为实数 2.multiplier each(现在是int)乘以小数位(由数组位置确定) 3.将整数加在一起 例如(警告这段代码有点丑,我还没有看两次,到目前为止只是一个测试)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define SIZE 500
int main(void)
{
FILE* pfile;
pfile = fopen("/tmp/code","r");
char *stringBuffer = (char *)malloc(SIZE * sizeof(char));
char ch;
int i = 0;
ch = getc(pfile);
while(ch != EOF)
{
stringBuffer[i] = ch;
ch = getc(pfile);
i++;
}
fclose(pfile);
int stringSize = (int)(sizeof(stringBuffer)/sizeof(char));
stringBuffer = (char *)realloc(stringBuffer,(stringSize * sizeof(char)));
printf("the string works: %s \n",stringBuffer);
int multi;
int sum;
for(int x =0; x < stringSize; x++)
{
int intger = ((int)stringBuffer[((stringSize - 1) - x)] - 48);
if( x != 0 )
{
multi = (int)pow(10,x);
sum += ( multi * intger );
}
else
sum += intger;
}
printf("the int works: %i \n",sum);
free(stringBuffer);
return(0);
}
但仍然像 int 那样转换为字符串会很好(我假设 c++ 有这个?)。
【问题讨论】:
-
atoi 是一个标准库函数,它可能做你想做的事?
-
@AjayBrahmakshatriya 除了,你不能,混叠违规,对齐错误等等。
-
@AjayBrahmakshatriya 如果你想将前 4 个字符(或者你的 sizeof(int) 是什么)转换为单个整数,你可以这样做
*(int*)stringBuffer这违反严格的别名。您不能安全地将char *视为int *。在对int等具有实际对齐限制的系统上执行此操作,您的程序可能会因SIGBUS或类似内容而失败。 -
@AndrewHenle 很好,然后必须通过 char[sizeof(int)] 和 int 的联合来完成。这应该没问题,因为整个 Union 将与 int 对齐,这将是正确的类型双关语。