如何将字符串保存到指针中并使用 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
时,您从前一个循环 运行 中泄漏了字符串。
我在循环中,我想将从 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
时,您从前一个循环 运行 中泄漏了字符串。