我可以知道如何將字符串寫入2D字符數組嗎? 我需要讀取字符串中的每個字符並將其放入二維數組中。我如何寫一個字符串到C中的二維數組?
例如:
char string [10];
我想將字符串中的所有字符寫入二維數組。
這意味着,當我讀取數組[0] [0]時,我應該得到第一個字符。
更新:
想我的字符串爲「GOODMORN」 那麼二維數組應該是這樣..
0|1|2|3
0 G|O|O|D
1 M|O|R|N
我可以知道如何將字符串寫入2D字符數組嗎? 我需要讀取字符串中的每個字符並將其放入二維數組中。我如何寫一個字符串到C中的二維數組?
例如:
char string [10];
我想將字符串中的所有字符寫入二維數組。
這意味着,當我讀取數組[0] [0]時,我應該得到第一個字符。
更新:
想我的字符串爲「GOODMORN」 那麼二維數組應該是這樣..
0|1|2|3
0 G|O|O|D
1 M|O|R|N
首先,確保array[0]
是大到足以容納你的字符串。其次,使用memcpy
或strncpy
將string
的字節複製到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)];
}
}
免責聲明:我真的不明白的問題是什麼;-)
你可以簡單地將字符串複製到某個位置所指向的用於二維數組 數組常量:
...
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
我剛剛寫了一個示例程序供您玩,看看這是你想要的。 重要的部分是循環進入遊戲的地方,將字符串逐個字符地分開。
有很多可以完成的改進(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]
標籤是爲了顯示你閹羊有空間,即,其中完全分裂發生。
當讀取數組[1] [[0]和數組[0] [1]時,您會得到什麼?你的問題不是很清楚。 – kubi 2011-02-15 18:46:39
你能指出爲什麼你需要這個嗎?當你閱讀arr [1] [0]時應該得到什麼? – 2011-02-15 18:48:20