【问题标题】:Using read() and putting the buffer into a string使用 read() 并将缓冲区放入字符串
【发布时间】:2012-01-28 01:50:39
【问题描述】:

这是我的第二个问题,因为这个问题我在第一个问题上遇到了麻烦。 我有一个文件,我必须使用 read() 语句读取,没有 fget() 或 fread() 等 我用这条线。

read(fileRead, buffer, blocksize);

如您所知,fileRead 是我的文件描述符,buffer 是无符号字符,blocksize 是缓冲区的大小(我选择了 32); 我的问题是我有一个循环,它一直运行到文件结束并获取文件的缓冲区(32),我需要将它放入一个字符串中。

所以我想知道您是否可以帮助我编写将缓冲区并将其附加到字符串的代码行(不是二维数组,这不好) 我试过了

openCopyClose(int argc, char ** argv)
{
    int i=0,j=0, k=0, count = 0;
    size_t blocksize = 32;
    char fromFile[256], newFile[1000][100], string[100000];
    int fileRead;
    unsigned char buffer[blocksize];
    ssize_t status;

    strcpy(fromFile, argv[1]);

    fileRead = open(fromFile, O_RDONLY);  // open for reading

    status = 99;
    while (status > 1)        //while not EOF or error
    {
        status = read(fileRead, buffer, blocksize);
        strcpy(newFile[i], buffer);

        for(count = 0; count<= 32; count++)
        {
            buffer[count] = 0;
        }
        i ++;                   

        if(status < 0)
        {
            printf("oops2\n");
            exit(1);
        }

    }
    printf("\n");

    for(j = 0; j < i; j++)
    {
        printf("%s", newFile[j]);
    }          
    close(fileRead);

}

但是当我尝试将它放在一个结构中时,这将不起作用。 我需要使用 read() 将该文件放入一个字符串 有什么想法吗?

之后我的 strtok 代码需要看起来像这样

struct processStruct processes[700];
while(count < 701)
{

    processes[count].processNumber = strtok(newFile[0], " \n");
    processes[count].quanta = atoi(strtok(NULL, " \n"));
    processes[count].priority = atoi(strtok(NULL, " \n"));

    count ++;
}

谢谢

【问题讨论】:

  • 您确定您的数据线是 32 字节长吗?向我们展示正在解析的文件。
  • 我通过读取命令传递文件 read(fileRead, buffer, blocksize) blocksize 是 32,这是你想要的吗?我的问题是将“缓冲区”放入单个字符串中

标签: c strtok strcpy atoi


【解决方案1】:

我解决了如何将文件放入字符串,相对简单,我很惊讶我错过了它

for(k =0; k < sizeof(buffer); k++)
{
    newFile[i] = buffer[k];
    i++;
 }

现在把它放在结构中.....

【讨论】:

  • 祝贺解决方案。如果可以,请确保通过单击左侧的复选标记将您的答案标记为“已接受”,以便其他人可以从您的成功中学习。干杯~
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-12
  • 2017-05-30
  • 2016-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多