【发布时间】:2021-06-09 18:05:43
【问题描述】:
花了很长时间尝试调试此问题后,我来寻求您的帮助。
基本上在这个练习中,我试图读取字符串"31|Name1;23|Name2;15|Name3" 并将其存储在struct s_perso 的数组中,其中| 标记一个年龄的结束和一个名字的开始,而;正在标记一个新结构的开始。
这是给定的 ft_perso.h:
#include <string.h>
#ifndef FT__PERSO__H
#define FT__PERSO__H
typedef struct s_perso
{
char *name;
float life;
int age;
char *profession;
}
t_perso;
#endif
我们将只使用该结构s_perso 中的数据age 和name。
这是我的代码:
#include "ft_perso.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int numberofstructs(char *str)
{
int i;
int length;
i = 0;
length = 0;
if (str[0])
length = 0;
else
{
while (str[i])
{
if (str[i] == ';')
length += 1;
i++;
}
}
return (length);
}
int get_data_length(char *str, int i)
{
int length;
length = 0;
while (str[i] != '|' && str[i] != ';' && str[i] != '\0')
{
length++;
i++;
}
return (length);
}
char *get_data(char *str, int i)
{
int j;
char *str2;
j = 0;
str2 = (char *)malloc(sizeof(char) * get_data_length(str, i) + 1);
while (str[i] != '|' && str[i] != ';' && str[i] != '\0')
{
str2[j] = str[i];
i++;
j++;
}
str2[j] = '\0';
return (str2);
}
t_perso **ft_decrypt(char *str)
{
int i;
int j;
t_perso **textttt_perso;
i = 0;
j = 0;
textttt_perso = (t_perso **)malloc(sizeof(t_perso **));
*textttt_perso = (t_perso *)malloc(sizeof(t_perso *) * numberofstructs(str));
while (j <= strlen(str) && str[j])
{
if (str[j] == ';')
{
i++;
j++;
}
textttt_perso[i]->age = atoi(get_data(str, j));
j = j + get_data_length(str, j) + 1;
textttt_perso[i]->name = get_data(str, j);
j = j + get_data_length(str, j);
}
textttt_perso[i+1] = 0;
return (textttt_perso);
}
int main(void)
{
int i;
t_perso **tab;
i = 0;
char str[29] = "31|Name1;23|Name2;15|Name3";
tab = ft_decrypt(str);
while(i <= numberofstructs(str))
{
printf("age = %d\n", tab[i]->age);
printf("age = %s\n", tab[i]->.name);
i++;
}
}
从我的调试中,我在第二次调用(当i = 1 并且我们正在处理t_perso **ft_decrypt(char *str) 的子字符串23 时)指令时出现段错误:
textttt_perso[i]->age = atoi(get_data(str, j));
我的猜测是我为结构数组本身或它可以包含的数组数量分配的内存是错误的。我无法指出这个问题......
提前感谢您的帮助,祝您有美好的一天!
【问题讨论】:
-
str[i] != '|' && str[i] && ';'呃,这里有点不对劲。那是str[i] != ';' -
@KamilCuk 我的上帝简直不敢相信我写了那个,真可惜。该程序无限循环,但我正在尝试看看它可能来自哪里
标签: arrays c struct segmentation-fault malloc