我可以知道如何将字符串写入2D字符数组吗? 我需要读取字符串中的每个字符并将其放入2D数组中。
例如:
char string [10];
我想将字符串中的所有字符写入2D数组。
这意味着,当我读取数组[0] [0]时,我应该得到第一个字符。
更新
假设我的字符串是“GOODMORN” 那么2D数组应该是这样的..
0|1|2|3
0 G|O|O|D
1 M|O|R|N
答案 0 :(得分:2)
首先,确保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)];
}
}
答案 1 :(得分:0)
免责声明:我真的不明白这个问题是什么; - )
你可以简单地将字符串复制到指向的位置 2D数组的数组常量:
...
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
答案 2 :(得分: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。:输出必须像
你好[结束]
世界[结束]
标签是为了告诉你是否有空格,即确切地发生了分裂。