我正在嘗試撰寫一個從 txt 檔案中獲取行并將這些行中決議出的變數添加到陣列中的代碼。txt 檔案讀取和決議作業完美。
我的文本檔案“inventory.txt”如下所示:
Mars;6
Snickers;7
Bounty;2
Twix;4
MilkyWay;6
KitKat;8
這是我的代碼:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
//INITIALIZE
char line[100];
char *elements[100] = {};
int i_stock[100];
int r2 = 0;
char item[20] = {0};
int stock;
//DEFINE FILE
FILE *the_file = fopen("inventory.txt","r");
//CHECK IF FILE EXISTS
if(the_file == NULL) {
perror("Inventarfehler");
exit(1);
}
//SCAN LINES FOR STOCK
while(fgets(line, sizeof(line), the_file)) {
sscanf(line, "%[a-zA-Z];%d", &item, &stock);
//ADD VAR TO ARRAY
elements[r2] = item;
r2 ;
}
printf(elements[2]);
return 0;
}
無論elements我列印什么索引,它總是KitKat. 我的代碼不斷覆寫變數。
printf("%s",elements[2])應該列印出來Bounty。
誰能幫我解決這個問題?提前致謝!
uj5u.com熱心網友回復:
問題是你的所有元素都是簡單的參考,它們item的內容最終將是你讀到的最后一個糖果棒名稱。
這是解決此問題的一種方法,通過使用以下命令將每個決議的字串復制到堆上新分配的字串strdup():
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_COUNT 100
int main()
{
//INITIALIZE
char line[MAX_COUNT];
char *elements[MAX_COUNT] = {};
int i_stock[MAX_COUNT];
int r2 = 0;
char item[20] = {0};
int stock;
//DEFINE FILE
FILE *the_file = fopen("inventory.txt", "r");
//CHECK IF FILE EXISTS
if (the_file == NULL)
{
perror("Inventarfehler");
exit(1);
}
//SCAN LINES FOR STOCK
while (r2 < MAX_COUNT && fgets(line, sizeof(line), the_file))
{
sscanf(line, "%[a-zA-Z];%d", item, &stock);
//ADD VAR TO ARRAY
elements[r2] = strdup(item);
r2 ;
}
printf("%s\n", elements[2]);
// Free allocated memory
for (int ii = 0; ii < r2; ii )
{
// printf("Free elements[%d]: %s\n", ii, elements[ii]);
free(elements[ii]);
elements[ii] = NULL;
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/363024.html
標籤:C
上一篇:為什么C程式跳過我的if回圈來編程raspberrypi?
下一篇:getline中的段錯誤
