此问题在此处已有答案:
How do I determine the size of my array in C?(24个答案)
12天前关闭。
我有一个函数ExtractNumber,我从main函数调用它,如下所示:
ExtractNumber(Array, &Numbers1, &Numbers2);
char**Array是动态分配数组,包含来自stdin字符串,这些字符串以double,double,然后是某个字符串开头doubleNumbers1和double Numbers2数组是动态分配数组,我希望将值从前面char数组中提取到这些数组中
ExtractNumbers函数如下所示:
//char ** array is my dynamically allocated array
//which reads string from stdin until EOF signal.
//double **Numbers1 and double **Numbers2 are my arrays for those
//double values, which are allocated in main function
void ExtractNumber (char **array, double **Numbers1, double **Numbers2)
{
double a,b;
char* str;
//ArrMax is variable where number of lines stored in
for (int i = 0; i < *ArrMax; i++)
{
str = array[i];
printf ("\n%s\n", str);
sscanf(str, "%lf,%lf",&a, &b);
*Numbers1[i] = a;
*Numbers2[i] = b;
printf ("%lf %lf",(*Numbers1)[i] , (*Numbers2)[i]);
}
}
//main function looks like this
//LenMax calculates the number of lines in Array
int main ()
{
char** Array;
int LenMax;
double * Numbers1;
double * Numbers2;
printf ("Insert string:\n");
Array = ReadArray(&LenMax);
Numbers1 = (double*) malloc (sizeof (Numbers1) * LenMax);
Numbers2 = (double*) malloc (sizeof (Numbers2) * LenMax);
ExtractNumber(Array, &Numbers1, &Numbers2);
for (int i = 0; i < LenMax; i++)
printf ("%lf\n", Numbers1[i]);
for (int i = 0; i<LenMax;i++)
{
free (Array[i]);
}
return 0;
}
我把这些printfs放在那里只是为了测试函数内部是否有str或 *Numbers1的问题,没有,所有的东西都按我想的那样打印出来了,但是我仍然得到了核心转储错误,当我试图从函数外部打印值时,它说(null).有什么建议吗?
我有它的工作之前,但在那之后,我做了一些改变,它停止工作。我很肯定,现在它几乎相同,它是如何之前,但仍然找不到什么错误。我有类似的功能,在其他程序,它的工作刚刚好,我超级困惑rn。我尝试在函数中创建两个临时数组,将值保存到其中,然后将它们传输到Numbers1和Numbers2值,但也没有成功工作。
编辑:我将代码更改为
void ExtractNumber (char ** array, double ** Num1, double ** Num2, int ArrMax)
{
double a,b;
char* str;
//ArrMax is variable in which the number of lines in my array is stored
for (int i = 0; i < ArrMax; i++)
{
str = array[i];
sscanf(str, "%lf,%lf",&a, &b);
*Num1[i] = a;
*Num2[i] = b;
}
}
不再发生内核转储错误。但是,如果标准输入中有2行,则函数只能读取第一行的值,第二行的值为零。
1条答案
按热度按时间ntjbwcob1#
所以我在功能上做了一些改动,现在一切都很好。
我做了一个变量,用来保存charr数组中的行数,我后来在for循环中使用了它。我还做了两个临时数组,然后把它们复制到我原来的数组中。