将行从stdin复制到一个字符指针数组

时间:2009-01-20 00:36:22

标签: c arrays pointers

我想将stdin中的行复制到一个字符指针数组中。例如,如果用户输入以下“the \ nquick \ nbrown \ nfox”,那么我希望有一个看起来像

的数组
  

arr [0] =“the”arr [1] =“quick”arr [2]   =“brown”arr [3] =“fox”

任何指针?

4 个答案:

答案 0 :(得分:1)

在循环中使用getchar()来逐个字符地获取输入。将字符附加到循环中的当前字符串,当当前字符是换行符'\ n'时,启动一个新字符串而不是附加该字符。

我会让你自己解决剩下的问题,如果你对这个问题有更具体的问题,那就问问吧。

  

任何指针?

0x3A28213A, 0x6339392C, 0x7363682E.

答案 1 :(得分:1)

请参阅fgets()malloc()

答案 2 :(得分:1)

您需要确保不仅分配了一个指针数组,还为每个元素分配了空间。我不会像你应该那样检查NULL指针,但是这应该让你开始。

char **arr;
int maxWords = 3;
int i;

arr = malloc (sizeof (char *) * maxWords);

for (i = 0; i < maxWords; i++)
{
    arr[i] = malloc (100);
    fgets (arr[i], 99, stdin);
}

之后,你也需要释放那个记忆:

for (i = 0; i < maxWords; i++)
{
    free (arr[i])
}
free (arr);

答案 3 :(得分:1)

你需要一个字符指针数组和一些空间让它们指向 - 也就是说,一个或多个字符数组......从动态分配到静态分配,有多种可能性。阵列。线路必须多长时间?这取决于您的环境。 (我必须在我的一个程序中修复一个错误,因为当我使用4096字节缓冲区作为行长时它失败了,但至少有一个输入行有超过5000个字节。失败是因为我计算了数字数据中的换行符,当答案为零时退出循环 - 不是因为缓冲区溢出!)

一种选择,在其他解决方案中没有提及(到目前为止):

  • 使用mmap()在内存中创建文件的私有地图。
  • 扫描映射的内存,将null替换为每个换行符。
  • 确保你有一个字符串开头的指针,并且紧跟在每个字符之后,这是一个换行符,但现在是一个空字符。