使用getchar接收来自文件的输入并插入到char指针中,从而产生分段错误

时间:2015-04-03 00:17:13

标签: c getchar

有一个名为prog1.txt的文件正在读入我的程序。要执行,我使用文件的名称和'<'要在文件中读取的符号。 (./a.out< prog1.txt)。然而,当我读它时,我立即收到分段错误。以下是我写的这个问题:

    char *strPtr;
    while(((*strPtr = getchar()) != EOF) && (*strPtr != '\n')) {
        strPtr++;
    }

我已经研究了其他问题,但我找不到一个问题,其解决方案可用于此。造成分段错误的原因是什么?

3 个答案:

答案 0 :(得分:1)

你有一个指针char* strPtr,但它可能不指向你可以使用的任何东西。你需要分配一些内存。 char* strPtr = malloc(numChars);在您完成分配的内存后,您还应该释放它:free(strPtr);

您需要设置可以读取的最大字符数。在这种情况下,我使用numChars。

答案 1 :(得分:1)

创建指针不会创建指向它的东西。使用指针(或数组语法)时,程序员有责任确保正确设置内容。

getchar()返回intEOF是无法使用char表示的值。因此,将char类型的任何值与EOF进行比较将始终失败。

您需要处理这两个问题。你不是。

例如;

char *strPtr = malloc(10);
int length = 0;
if (strPtr != NULL)
{
     int achar; 

     while(length < 10 && (achar = getchar()) != EOF && achar != '\n')
     {
         strPtr[length] = (char)achar;
         ++length;
     }
}

 /* do whatever is needed with strPtr and length*/

free(strPtr);

strPtr不是NULL的检查是在尝试写入已分配的数组之前确保malloc()调用成功。

length用于确保代码在分配的长度之后不会写入strPtr

achar用于在将值转换为EOF之前检查char(不在代码之后)。

答案 2 :(得分:0)

使用数组

char strPtr[10];
int temp;
int i = 0;
while( i < 10 && ((temp = getchar()) != EOF) && (temp != '\n')) {
    strPtr[i] = temp;
    i++;
}