【发布时间】:2019-11-19 04:43:53
【问题描述】:
我正在尝试用 C 语言编写一个方法来读取文件。 我不知道文件会有多长时间,但我知道结构。 问题是,当我更改 str 的值时,所有引用它的 var 都会更改。有什么方法可以让我的变量值保持不变?很抱歉代码乱七八糟。
HashMap read_Table(char* srcfilename){
FILE* src = fopen(srcfilename, "r");
if (src == NULL) {
printf("READ FILE FAILED\n");
}
char str[256];
if (fgets(str, 255, src) != NULL) {
}
fgets(str, 255, src);
char* attribute_size = str;
int a_size = atoi(attribute_size);
char **outAttributes = malloc(sizeof(char *) * a_size);
fgets(str, 255, src);
for(int i = 0; i<a_size; i++){
if (fgets(str,255,src) != NULL){
outAttributes[i] = str;
}
}
fgets(str, 255, src);
//get key size:
printf("!!!!!!\n%s", str);
fgets(str, 255, src);
//get key size number
printf("!!!!!!\n%s", str);
char* key_size = str;
int k_size = atoi(key_size);
if (fgets(str, 255, src) != NULL) {
//get Key:
printf("!!!!!!\n%s", str);
}
char **outKeyItem = malloc(sizeof(char *) * k_size);
for(int i = 0; i<k_size; i++){
if (fgets(str,255,src) != NULL){
printf("!!!!!!\n%s", str);
outKeyItem[i] = str;
}
}
fgets(str, 255, src);
//get Table:
HashMap out_map = new_HashMap((void**)outAttributes, a_size ,(void**)outKeyItem, k_size);
while (!feof(src)) {
char** curr_tuple = malloc(sizeof(char *) * a_size);
for(int i=0;i<a_size;i++){
if(fgets(str, 255, src)!=NULL){
curr_tuple[i] = str;
printf("Tuple: %d %s",i, curr_tuple[i]);
} else{
break;
}
}
if(feof(src)){
break;
}
insert(out_map, (void**)curr_tuple);
}
printHashMap(out_map);
printf("\n");
return out_map;
}
【问题讨论】:
-
你需要分配内存来保存字符串,然后使用
strcpy复制字符串。还有一个名为strdup的函数在某些系统上可用。
标签: c pointers memory-management