2016-12-06 54 views
-3

我目前正在使用文件并通过它们进行排序。到目前为止,我可以打开文件并阅读每一行。现在我正试图将每一行分成特定的部分。唯一的问题是当我打印printf(“%s \ n”,line)行时,我的称为convertLine()的函数;它打印完全是我想要的。但我需要在main中打印,而不是从main调用的函数convertLine()中打印。这里是我的convertLine()函数:字符数组在不同的函数中操作时不会改变

void convertLine(char line[401], int *number, char fileLine[401]) 
{ 


    char firstNum[2] = { fileLine[6] }; 
    char secondNum[2] = { fileLine[7] }; 
    char thirdNum[2] = { fileLine[8] }; 
    char colonChar[2] = { fileLine[9] }; 
    char fullMark[7] = { "" }; 
    int length = 0; 


    length = strlen(fileLine); 
    ++length; 
    line = (char*)malloc(length); 

    strcpy(fullMark, firstNum); 
    strcat(fullMark, secondNum); 
    strcat(fullMark, thirdNum); 
    *number = atoi(fullMark); 

    if (strstr(secondNum, ":")) //this works 
    { 
     strcpy(line, &fileLine[7]); 
    } 
    else if (strstr(secondNum, ":")) 
    { 
     strcpy(line, &fileLine[8]); 
    } 
    else 
    { 
     strcpy(line, &fileLine[9]); 
    } 
    printf("%s \n", line); //i want to be able to do this in main 
    length = strlen(line); 
    ++length; 
    line = (char *)realloc(line, length); 




    free(line); 


    return; 

} 
+0

该代码没有意义。首先,C是按价值划分的。其次,'line =(char *)realloc(line,length);免费(线);'是完全荒谬的。 – EOF

+0

当然,我明白混乱。我明白C是按值调用的,但是当我在main函数中打印这个函数的数字变量时,怎么会这样呢?此外,为什么会重新分配我的线阵列的空间是无意义的,当内部的内容被更改并可能占用不同的空间量时? – bodotheguy

+0

你真的需要从'c'的绝对基础开始。我没有时间来解释这个程序中的所有错误,也不是我真的想要教一个比较字符串与字符串与'=='如何在没有付款的情况下写'c'的人。 – EOF

回答

2

从你的函数删除printf()free()。不应使用free()realloc(),因为line可能来自非malloc化的内存块。从main()呼叫convertLine(),然后打印line字符串的内容。然后,如果使用malloc/realloc分配字符串,则可以重新分配和/或释放该字符串。

相关问题