如何在C中将数组的某些部分复制到另一部分?

时间:2014-12-07 13:40:32

标签: c arrays string

所以我的程序应该做的是:用这段代码读取.txt文件。

FILE *fp;
char filename[40],part1[4],part2[4]; 
int c=0,pt1,pt2; 
printf("\nEnter a file name to open: ");
gets(filename); 
if ((fp = fopen(filename, "r"))!= NULL) 
{
    printf("\nThe file %s was opened successfully!",filename);  
}
else
{
    printf("\nThe file didnt open succesfully!");
}

然后将每一行存储在row字符串中。

fgets(part1,4,fp); 
pt1 = atoi(part1); 
struct input 
{
    char name[20],row[30],code[3],nPieces[3],needed[3],usage[3],nUses[3];
};

struct input list[pt1];  

while (c++ < pt1 )  
{
    fgets(list[c].row,30,fp); 
    printf ("\n%s", list[c].row);
}

但问题是,之后我必须把行字符串切成碎片(对于exp,txt的第1行是&lt; 1 Glass 2 0 9 3 1&gt;其中每个数字代表什么)所以我想要的是把&#34; 1&#34;进入代码[3]字符串&#34; Glass&#34;到了名称[30]字符串等我尝试使用isspace()扫描行字符串使其工作,每当它找到一个空格时,它将使用{{从0-(空格 - 1)复制行数组1}}。由于某些原因,当我运行程序停止工作。任何可以提出建议的人?

2 个答案:

答案 0 :(得分:0)

似乎你想要分配一个大小为pt1的数组,但这不会起作用,因为这是编译时间,而pt1的值是未知的。

使用:

struct input 
{
    char name[20],row[30],code[3],nPieces[3],needed[3],usage[3],nUses[3];
};

你声明一个变量,但似乎你想要定义一个类型,所以:

typedef struct input 
{
    char name[20],row[30],code[3],nPieces[3],needed[3],usage[3],nUses[3];
};

然后你必须malloc内存:

struct input list= calloc(pt1, sizeof(struct input));

声明

struct input list[pt1];

应该给出编译器错误(对我的编译器有误)。

答案 1 :(得分:0)

  

所以我想要的是把#34; 1&#34;进入代码[3]字符串&#34; Glass&#34;   进入名称[30]字符串等。

使用sscanf()而不是isspace()strncpy()会更容易:

    sscanf(list[c].row, "%2s%19s%2s%2s%2s%2s",
                        list[c].code,
                        list[c].name, list[c].nPieces, list[c].needed, list[c].usage,
                                                                       list[c].nUses)