拆分没有分隔符C的字符串

时间:2018-03-13 08:24:59

标签: c string split

我有一个256个字符的字符串,我想在c中将它分成64个4个字符的字符串,但我没有分隔符,是否有任何功能可以这样做?

我有以下代码:

char message[256]="MSN0MSN1MSN2MSN3..";
char a[4];

for(i=0;i<64;i++)
{
   memcpy(a[i],message+(i*4),4);
   *(ram_tx+i)=a(i);
}

ram_tx的部分工作,代码中的问题是memcpy,因为当我打印a [I]时显示:

MSN0 MSN1 MSN23

1 个答案:

答案 0 :(得分:2)

在64中剪切字符串是否有问题?

#define NB_STRING 64
#define STRING_LEN 4

int main(void)
{
    char input[256] = "... something";
    char output[NB_STRING][STRING_LEN + 1];

    for (size_t i = 0; i < NB_STRING; ++i) {
        memcpy(output[i], input + (i * STRING_LEN), STRING_LEN);
        output[i][STRING_LEN] = '\0';
    }

    for (size_t i = 0; i < NB_STRING; ++i) {
        printf("%s\n", output[i]);
    }

    return (0);
}

OP插入以下代码后编辑:

char message[256]="MSN0MSN1MSN2MSN3..";
char a[4];

for(i=0;i<64;i++)
{
   memcpy(a[i],message+(i*4),4);
   *(ram_tx+i)=a(i);
}

嗯,它确实可能不起作用,首先是因为我们不知道&#34; ram_tx&#34;是(他的类型,特别是),因为代码非常可疑。

你声明一个&#34; char [4]&#34;然后你做&#34; a(1)&#34;。你明白在这里,你称之为功能 nammed&#34; a&#34;使用参数&#34; 1&#34; ?即使你通过put&#34; a [1]&#34;或者只是&#34; a&#34;为了在ram_tx中复制数组,好吧,它似乎总是可疑的,即使ram_tx是一个指针数组(因为所有指针都指向一个点是什么意思?)。

了解在每个for循环中,您将删除&#34; a&#34;的先前值。 是&#34; ram_tx&#34;对显示器负责吗?如果是,你可以添加一个定界符,以便了解&#34; a&#34;真的包含? 此外,是&#34; ram_tx&#34;等待&#39; \ 0&#39; ?因为你没有添加它,它可能是&#34;添加&#34;一些你不想要的垃圾价值。