将带有数字和字母的字符串放入结构中的int指针中

问题描述 投票:-1回答:1
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格式

c string parsing pointers integer
1个回答
0
投票

看起来你对一些事情感到困惑。

1)内存分配

 p->digits = malloc(sizeof(str) + 1);

这是字符串的分配,但p->digitsint类型的指针。

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 
© www.soinside.com 2019 - 2024. All rights reserved.