typedef struct Int40
{
int *digits;
} Int40;
Int40 *parseString(char *str)
{
Int40 *p;
int i;
int *intPtr;
printf("%s\n", str);
p->digits = malloc(sizeof(str) + 1);
for(i = 0; i < strlen(str); i++)
{
p->digits = atoi(str);
printf("%d\n", p->digits);
}
int main(int argc, char *argv[])
{
Int40 *p;
parseString("0123456789abcdef0123456789abcdef01234567");
return 0;
}
我试图将字符串“012345679abcdef0123456789abcdef01234567”放入结构指针数字,但我不知道我应该怎么做。
我当前程序的错误是'传递atoi的参数1使得指针来自整数而没有强制转换
如果我从str [i]和p-> digits [i]中删除[i]
p->digits[i] = atoi(str[i]);
然后我的结果只返回123456789
编辑**我在parseString函数中添加了一个malloc我试图弄清楚如何使用结构中的int *数字将char * str转换为int格式
看起来你对一些事情感到困惑。
1)内存分配
p->digits = malloc(sizeof(str) + 1);
这是字符串的分配,但p->digits
是int
类型的指针。
2)函数atoi
int atoi(const char *str);
返回int
值。 int
类型变量的最大值是2147483647
检查:limits.h。
如果你使用long long int
它可以给你19
数字。你需要比long long int
更多的数字吗?
3)记住为结构分配内存并记得释放它。
检查以下程序:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct LLint19
{
long long int *digits;
} LLInt19;
long long int sg7_atoi(const char *c)
{
long long int value = 0;
int sign = 1;
if( *c == '+' || *c == '-' )
{
if( *c == '-' ) sign = -1;
c++;
}
while (*c >= '0' && *c <= '9') // to detect digit == isdigit(*c))
{
value *= 10;
value += (int) (*c-'0');
c++;
}
return (value * sign);
}
LLInt19 *parseString(char *str)
{
LLInt19 *p;
long long int *value;
printf("Input str: %s\n", str);
value = malloc (sizeof(long long int) ); // allocate memory for long long int value
p = malloc( sizeof(LLInt19) ); // allocate memory for the structure
*value = sg7_atoi(str); // do a conversion string to long long int
p->digits = value;
return p;
}
int main(int argc, char *argv[])
{
LLInt19 *p;
char test1[] = "1234567890123456789";
p = parseString(test1);
printf("Output str: %lld \n", *p->digits);
free(p->digits);
free(p);
return 0;
}
输出:
Input str: 1234567890123456789
Output str: 1234567890123456789