2012-10-10 58 views
0

共行或列总使用指针例如:我有一个包含一些text..like我怎么能指出在C

my name is sunny 
i am a student 

我想从文件中读取并存储它像一个文件,

a[0][0]=my,a[0][1]=name,a[0][2]=is,a[0][3]=sunny, 

a[1][0]=i,a[1][1]=am,a[1][2]=a,a[1][3]. 

我该怎么办? 在此先感谢。

+0

所有行都恰好有4个单词? – none

回答

1

您可以使用fgets来阅读每一行文本。对于每行读取,您增加用于访问第一个内存(行)的计数器。对于每个读取行,您使用strtok遍历行中的所有标记。对于每个令牌strtok返回,您应该将指针归属为a[i][j]并且增量为j

当然,a是指向char matriz的指针。

+0

即使它们被空间以外的其他字符分隔,您仍然可以在调用strtok时列出所有可能的字符 – fayyazkl

0

好吧,我会给你一些线索。

首先声明a作为

char a[2][3]; 

此变量可以这样使用:

int main() 
{ 
    char a[2][3]; 

    a[1][1]='a'; 
    printf("%c",a[1][1]); 

} 

然后使用fscanf(f, "%c", a[][]);从文件中读取,看到网上的教程和手册页本。

另一种选择是做dinamically:

声明a为:

char **a; 

之后,您分配存储器这样的:

a = (char**)malloc(2 * sizeof(char*)); //Two times the size of char 

现在,您对内存第一个数组,我们要“插入”数组的另一个数组的每个空间。像矩阵一样思考。

for(i=0; i<3; i++) 
    a[i] = (char*)malloc(3 * sizeof(char)); 

这给你你的矩阵。像第一个案例一样使用它。

问题的情况下读取字符串,所以尝试做同样的这个结构代替焦炭

typedef struct string { 
    char cadena[6]; 
}myString; 

祝您好运!

0

我还没有测试过。这只是一个例子,如何去做。

/* not real value; see limits.h header if you are in POSIX or equivalento to your env */ 
#define LINE_MAX 128 
char line[LINE_MAX + 1]; 
char contents[MAX_LINES][MAX_WORDS]; 
char * token; 
/* read file line by line */ 
while(fgets(line, LINE_MAX, fp) != NULL) { 
/* split words by white-space */ 
token = strtok(buffer, " "); 
while(token != NULL) { 
    // token is "my", after "name" and and so on. 
    // store it into contents array. you can use strcpy() or strncpy() (more safe) 
} 
}