C 读取功能:将缓冲区复制到另一个字符数组

C 读取功能:将缓冲区复制到另一个字符数组,c,arrays,char,C,Arrays,Char,我是C语言的新手,正在尝试使用read函数。我想把缓冲区中的内容(tempChar)放到另一个字符数组(str)中。这样我就可以再次运行read函数并在以后添加到str(因为tempChar将由第二个read函数重写)。像这样: char tempChar; read(0, &tempChar, 10); char *str; str= (char*) malloc(10); memcpy(str, &tempChar, fileSize); /*I'm doing somet

我是C语言的新手,正在尝试使用read函数。我想把缓冲区中的内容(tempChar)放到另一个字符数组(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;
它编译得很好,但当我实际尝试运行它时,它给了我一个分段错误

有什么想法吗?非常感谢

char tempChar;
read(0, &tempChar, 10);
您正在将文件中的10个字符读入内存,大小仅为单个字符。
char-tempChar
仅为单个字符保留内存,&tempChar指向这个内存字节

char *str;
str= (char*) malloc(10);

// why not now do ?
read(0, str, 10);

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

你宣布

char tempChar
它可以容纳1个字符

而是将tempChar声明为

char tempChar[10];
仅分配1个字节。所以你只能在那里保存1个字符。当您
memcpy()
请求复制10个不存在的字节时。因此,在读取内存时,不应导致未定义的行为(这会导致SEGFULT)


您应该像对待str那样使用
malloc()
,或者像
charchattmp[10]
那样声明一个本地数组。注意:
malloc()。。您还需要分配
char*buffer
而不是
char tempChar;

如果要读取两次并将结果彼此相邻地放在同一个缓冲区中,则不需要临时缓冲区:可以使用指针算法告诉
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();
}
charbuf[10];
ssize_t nread=读取(0,buf,5);
如果(nread<0)
错误();
其他的
{
nread=读取(0,buf+nread,sizeof buf-nread);
如果(nread<0)
错误();
}

Zero是一个文件描述符:按照惯例,它是
stdin
的底层文件描述符。
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();
}