C 读取功能:将缓冲区复制到另一个字符数组
我是C语言的新手,正在尝试使用read函数。我想把缓冲区中的内容(tempChar)放到另一个字符数组(str)中。这样我就可以再次运行read函数并在以后添加到str(因为tempChar将由第二个read函数重写)。像这样: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
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();
}