c-read函数:将缓冲区复制到另一个char数组



我是C的新手,正在尝试使用read函数。我想把缓冲区中的内容(tempChar(放在另一个char数组(str(中。这样我就可以再次运行read函数,稍后再添加到str中(因为tempChar将被第二个read函数重写(。像这样:

char tempChar;
read(0, &tempChar, 10);
char *str;
str= (char*) malloc(10);
memcpy(str, &tempChar, fileSize); /*I'm doing something wrong here*/

所有这些让我可以重新运行:

read(0,&tempChar, 1);
str= realloc(str, 11);
str[10]=tempChar;

它编译得很好,但当我真正尝试运行它时,它会给我一个分段错误

有什么想法吗?非常感谢。

您需要有足够的存储空间来存储正在读取的10个字符

你申报了

char tempChar

可以容纳1个字符。

相反,将tempChar声明为

char tempChar[10];
char tempChar;
read(0, &tempChar, 10);

您正在将文件中的10个字符读取到只有一个字符大小的内存中
char tempChar仅为单个字符保留存储器;tempChar指向这一单个字节的内存。

char *str;
str= (char*) malloc(10);
// why not now do ?
read(0, str, 10);
char tempChar;

只分配1个字节。所以你只能保持1个字符。当您memcpy()时,您请求复制10个不存在的字节。因此,当你读取记忆时,你不应该引起未定义的行为(这会给你SegFault(。

您应该像对待str的malloc()那样做一些事情,或者声明一个类似char chatTemp[10]的本地数组。注意:malloc()不需要C.转换。

如果您想读取两次并将结果放在同一缓冲区中,则不需要临时缓冲区:您可以使用指针算术来告诉read使用原始缓冲区的后半部分。像这样:

char buf[10];
ssize_t nread = read(0, buf, 5);
if (nread < 0)
    error();
else
{
    nread = read(0, buf + nread, sizeof buf - nread);
    if (nread < 0)
        error();
}

您需要提供一个文件描述符作为读取函数的第一个参数。。此外,您需要分配char * buffer而不是char tempChar; 检查样本使用情况

最新更新