2011-02-15 47 views
1

我可以知道如何將字符串寫入2D字符數組嗎? 我需要讀取字符串中的每個字符並將其放入二維數組中。我如何寫一個字符串到C中的二維數組?

例如:

char string [10];

我想將字符串中的所有字符寫入二維數組。

這意味着,當我讀取數組[0] [0]時,我應該得到第一個字符。

更新:

想我的字符串爲「G​​OODMORN」 那麼二維數組應該是這樣..

0|1|2|3 
0 G|O|O|D 
1 M|O|R|N 
+0

當讀取數組[1] [[0]和數組[0] [1]時,您會得到什麼?你的問題不是很清楚。 – kubi 2011-02-15 18:46:39

+0

你能指出爲什麼你需要這個嗎?當你閱讀arr [1] [0]時應該得到什麼? – 2011-02-15 18:48:20

回答

2

首先,確保array[0]是大到足以容納你的字符串。其次,使用memcpystrncpystring的字節複製到array[0]

如果您需要處理,並分別應對字符,你可以做的memcpy做什麼開始,但在for循環中:

#define NUM_ARRAYS 2 
#define LENGTH 4 

char *string = "GOODMORN"; 

for (arr = 0; arr < NUM_ARRAYS; arr++) 
{ 
    for (idx = 0; idx < LENGTH; idx++) 
    { 
     array[arr][idx] = string[idx + (arr * LENGTH)]; 
    } 
} 
0

免責聲明:我真的不明白的問題是什麼;-)

你可以簡單地將字符串複製到某個位置所指向的用於二維數組 數組常量:

... 

char array[2+1][4]; 
memcpy((void *)array, TEXT, sizeof(TEXT)); 

... 

但是這不會產生可自動調整大小的數組。也許你覺得以下幾點:

#include <string.h> 
#include <stdlib.h> 
#include <math.h> 
#include <stdio.h> 

char **matrixify(char text[], int vert, int horiz) 
{ 
int i=0; 
char **m = (char **)calloc(vert, sizeof(char*)); 
do m[i] = text + i * horiz; while(i++ < vert); 
return m; 
} 

int main() 
{ 
int x, y; 
/* char t[] = "this is a really long text with many words and stuff"; */ 
char t[] = "GOODMORN"; 
int edge = 1+(int)sqrt((double)strlen(t)); /* make a square from text */ 
/* int vert = edge, horiz = edge; */ /* Auto size detection */ 
int vert = 2, horiz = 4; 

char *textbuf = (char *)calloc(vert, horiz); /* not always 0-terminated */ 
char **matrix = matrixify(strncpy(textbuf, t, vert*horiz), vert, horiz); 

for(y=0; y<vert; y++) { 
    for(x=0; x<horiz; x++) printf("%c ", matrix[y][x]); 
    printf("\n"); 
} 
/* prints: 
    G O O D 
    M O R N 
    through matrix[i][j] */ 
return 0; 
} 

這會導致你的內存佈局,但看起來很複雜 的問題狀態,但公司的C ...

問候

RBO

0

我剛剛寫了一個示例程序供您玩,看看這是你想要的。 重要的部分是循環進入遊戲的地方,將字符串逐個字符地分開。

有很多可以完成的改進(strncpy,輸入變量是動態的,MEMORY FREES等),但這取決於你。

編輯:strncpy修改只是由橡膠靴張貼。

int main() 
{ 
    char A[12] = "Hello World", **B; 
    int B_LEN = strlen(A)/2 + 1; 

    B = (char**)malloc(2 * sizeof(char*)); 
    B[0] = (char*)malloc(B_LEN * sizeof(char)); 
    B[1] = (char*)malloc(B_LEN * sizeof(char)); 

    int i, j; 

    for (i = 0; i < 2; i++) { 
     for (j = 0; j < B_LEN; j++) { 
      B[i][j] = A[B_LEN * i + j]; 
     } 
     B[i][j] = '\0'; 
    } 

    printf("%s", B[0]); 
    printf("[END]\n"); 
    printf("%s\n", B[1]); 
    printf("[END]\n"); 

    return 0; 
} 

Obs。:輸出必須像

你好[END]
世界[END]

標籤是爲了顯示你閹羊有空間,即,其中完全分裂發生。

相關問題