C编程将字符数组复制到二维字符数组

C编程将字符数组复制到二维字符数组,c,arrays,C,Arrays,在项目的这一部分中,我试图将一个包含空格的字符数组复制到一个2D字符数组中,在2D字符数组中,我希望将一维数组中的每个字符串在空格之前分开,并将其放入2D字符数组中 这是我的密码 #include <stdio.h> int main() { int tracker = 0; char string[100]; int b1 = 0; int b2 = 0; char bitString[100][8]; printf("Proj

在项目的这一部分中,我试图将一个包含空格的字符数组复制到一个2D字符数组中,在2D字符数组中,我希望将一维数组中的每个字符串在空格之前分开,并将其放入2D字符数组中

这是我的密码

#include <stdio.h>

int main()
{
    int tracker = 0;
    char string[100];
    int b1 = 0;
    int b2 = 0;
    char bitString[100][8];


    printf("Project Zero\n");

    printf("Enter an 8-bit Binary Number!\n");

    gets(string);

    memset(&bitString[0], 0, sizeof(bitString));

    while(string[tracker] != '\0')
    {
        if(!isspace(string[tracker]))
        {
            bitString[b1][b2] = *(string+tracker);
            b2++;
            tracker++;
        }
        else
        {
            b1++;
            tracker++;
            b2=0;
        }
    }


    printf("String is: %s\n",*(bitString+0));
    printf("String is: %s\n",*(bitString+1));

return 0;
}

我的输入是:000011111 000011100

结果是: 字符串为:000011100001100

字符串为:000011100

我不明白为什么*bitString+0的结果是我输入的所有字符串都没有空格。 有人能给我解释一下为什么会发生这种情况,以及我能做些什么来修复它。

如果您更改字符位字符串[100][8];到字符位字符串[100][9];它起作用了。 我认为C编译器会自动将空字符放在每个字符数组行的末尾,以知道字符串在那里结束,当您在其中一行中写入位字符串的第7个位置时,您会将空字符替换为指向程序存储用户输入的字符数组字符串的其余部分的指针,因此当您打印它时,它一直运行,直到找到字符串的空字符。
您应该包括库和,以支持您使用的所有函数。

如果while循环中的变量b2大于char bitString[i][j]中j参数的大小;导致位字符串[0][8]交互中出现分段错误

for循环可以简化您的逻辑否这是错误的:C编译器会自动将空字符放在每个字符数组行的末尾,以知道字符串在那里结束。然而,memset将0放在所有地方,因此,事实上,…[9]除了缺少控件(如输入的大小等)外,还可以解决问题。。请注意,例如,7位的输入在当前版本中可以工作。