如果文件的内容大于resultbuf这个字符指针怎么办
时间: 2024-04-09 09:33:05 浏览: 51
如果文件的内容大于`resultbuf`这个字符指针所能存储的长度,你可以考虑使用动态分配的方式来存储文件内容。这样,无论文件内容有多大,都可以正确地读取并处理。
下面是修改后的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdarg.h>
#define TEMP_STR_LEN 100
#define HUAYI_BOOL int
#define HUAYI_TRUE 1
#define HUAYI_FALSE 0
void get_cmd_result(const char* cmd, char** resultbuf, size_t* bufsize) {
FILE* fp = popen(cmd, "r");
if (fp) {
*resultbuf = malloc(*bufsize);
fgets(*resultbuf, *bufsize, fp);
pclose(fp);
}
}
HUAYI_BOOL TcpObtainServervalue(int count, ...) {
char* resultbuf = NULL;
size_t bufsize = 1024;
char cmd[TEMP_STR_LEN];
int counter = 0;
va_list args;
va_start(args, count);
strcpy(cmd, "cat /tmp/returnValue");
do {
if (counter > 10)
return HUAYI_FALSE;
else if (counter)
sleep(1);
if (resultbuf)
free(resultbuf);
get_cmd_result(cmd, &resultbuf, &bufsize);
counter++;
} while (!strlen(resultbuf));
char* token = strtok(resultbuf, " ");
int i = 0;
while (token != NULL && i < count) {
char* str = va_arg(args, char*);
strcpy(str, token);
token = strtok(NULL, " ");
i++;
}
va_end(args);
unlink("/tmp/returnValue");
free(resultbuf);
return HUAYI_TRUE;
}
int main() {
char name1[128];
char name2[128];
char name3[128];
TcpObtainServervalue(3, name1, name2, name3);
printf("%s, %s, %s\n", name1, name2, name3);
return 0;
}
```
在`get_cmd_result`函数中,我们通过传递`resultbuf`和`bufsize`的指针,动态分配足够的内存来存储文件内容。每次循环前,如果`resultbuf`已经分配了内存,则先释放内存。这样可以确保`resultbuf`始终能够容纳文件内容,无论其大小如何。
请注意,在程序结束时,我们也需要释放动态分配的内存,以免产生内存泄漏。
阅读全文