由于C中的这些指针和数组,程序崩溃

由于C中的这些指针和数组,程序崩溃,c,arrays,pointers,C,Arrays,Pointers,由于这些指针变量,我的代码正在崩溃。他们怎么了 main中的变量声明 char* fname = (first_name_length*sizeof(char)); char* lname = (last_name_length*sizeof(char)); char* pfname = &fname[0]; char* plname = &lname[0]; 作用 void get_first_name(FILE* fp, int length, char* pfnam

由于这些指针变量,我的代码正在崩溃。他们怎么了

main中的变量声明

char* fname = (first_name_length*sizeof(char));

char* lname = (last_name_length*sizeof(char));

char* pfname = &fname[0];

char* plname = &lname[0];
作用

void get_first_name(FILE* fp, int length, char* pfname){

char c;
int i = 0;
int number_of_conversions;

//char* first_name = malloc(length*sizeof(char));

number_of_conversions = fscanf(fp, "%c", &c);

while (!isspace(c)){

    pfname[i] = c;

    number_of_conversions = fscanf(fp, "%c", &c);

}

}

在前两行中,将数学结果指定给字符数组 第一个字符[50],最后一个字符[50];char tmp[]=“约翰·史密斯”

这不是在C中分配内存的方式。您可以静态分配内存:

char fname[first_name_length]; //This assumes that first_ and last_name_length are
char lname[last_name_length];  //constants
或者像这样:

char* fname = malloc(first_name_length*sizeof(char)); //first_ and last_name_length can
char* lname = malloc(last_name_length*sizeof(char));  //be constants or variables

您试图用
fname
lname
的声明来完成什么?在声明中存储名称?为什么在这种情况下这很重要?这个任务毫无意义。您正在为它们分配内存吗?是的。为我拥有的字符列表分配足够的内存。我正在尝试将数组从void函数传输到main。在
get\u first\u name
函数中,您在
while
循环中从不前进
i
;最后你反复给pfname[0]写信。我知道我忘了malloc。但它仍然崩溃。它在调试器确定的相同位置崩溃?它说程序已经停止工作。没有告诉任何关于这个问题的事情,但是当我删除这些变量时,程序运行得很好。为了让我们进一步帮助你,我们需要了解更多。处理John Bode和我在问题评论中提到的问题。如果这不能解决您的问题,您将需要确定代码失败的确切位置。这可以通过调试器来完成,或者如果调试器不是一个选项,可以通过在代码中抛出一堆
printf
语句来缩小程序失败时的范围;使用
strncpy()
不会
0
-终止目标
char
-数组,因此它们不是有效的C-“字符串”。另外,对于第二次调用
strncpy()
第三个参数丢失。是的,你说得对,我将编辑我的答案。问题是我只是用我的手机,没有gcc,所以我不能验证我的代码。你投了反对票吗?
char fname[first_name_length]; //This assumes that first_ and last_name_length are
char lname[last_name_length];  //constants
char* fname = malloc(first_name_length*sizeof(char)); //first_ and last_name_length can
char* lname = malloc(last_name_length*sizeof(char));  //be constants or variables