如何将字符串保存到指针中并使用 malloc 重新定义它? C

How can i save a string into a pointer and redefine it using malloc? C

我在循环中,我想将从 fifo 读取的值保存在变量中。

    char *tmp=NULL;
    char *opts=NULL;
    char break_[]="DONE\n";
    int byte_;
    while(1){
        pipe_r = open(pipe_r_n, O_RDONLY);
        if(pipe_r==-1){
            exit(100);
        }
        read(pipe_r,&byte,sizeof(int));
        opts=malloc((byte+1)*sizeof(char));
        if (!opts) {
            free(opts);
            opts = NULL;
            close(pipe_r);
            exit(102);
        }
        read(pipe_r,opts,byte*sizeof(char));
        printf("ho letto: %s",opts);
        close(pipe_r);
        if(strcmp(opts,break_)==0){
            break;
        }
        free(opts);opts=NULL;tmp=NULL;
    }
    free(opts);opts=NULL;tmp=NULL;

byte_ int 是后面需要读取的字节数。 它说在乞讨中读取了 0 个字节,但也打印了(读取而不是等待(?))。然后它读取具有正确字节数的行,然后读取相同字节数的行......有时它会自己重复什么都没有... 那是客户:

    fd=fopen(argv[3],"r"); 
    if(fd==NULL){
        exit(100);
    }
    char *line=NULL;
    size_t len=0;
    ssize_t read;
    int byte;

    while ((read = getline(&line, &len, fd)) != -1) {
        printf("%s\n",line);
        pipe_r = open(pipe_r_n, O_WRONLY);
        if(pipe_r==-1){
            exit(100);
        }
        byte=strlen(line);
        byte;
        write(pipe_r,&byte,sizeof(int));
        write(pipe_r,line,sizeof(char)*(strlen(line)));
        close(pipe_r);
        if(strcmp(line,"EXIT\n")==0){
            break;
        }
   }

正如@Michael Dorgan 指出的那样,您需要在读取字符串后添加 opts[byte] = '[=10=]'

分配区域的最后一个字节始终未初始化(可以是任何剩余值)。并且由于您经常使用 malloc 和 free 行为。您的堆内存很可能正在喷洒非零字符。因此,当您调用 printf 时,您从前一个循环 运行 中泄漏了字符串。