【问题标题】:Split a string without delimiter C拆分不带分隔符的字符串 C
【发布时间】:2018-03-13 08:24:58
【问题描述】:

我有一个 256 个字符的字符串,我想在 c 中将它拆分为 4 个字符的 64 个字符串,但是我没有分隔符,有什么函数可以这样做吗?

我有以下代码:

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,当我 printf a[I] 时它显示:

MSN0 MSN1 MSN23

【问题讨论】:

  • 不是开箱即用的,没有。你需要自己动手。出于兴趣,当您对原始字符串进行索引时,为什么不能将原始字符串视为 4 个字符的 64 个字符串?
  • 我有一个 64x4 矩阵的 ram 内存,我把所有消息都放在里面
  • 循环使用memcpy。应该这样做。
  • 你真的是在谈论“字符串”,还是只是字符数组。
  • 一个分隔符:64字节大小。试试看,不是很困难。

标签: c string split


【解决方案1】:

把你的字符串剪成 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);
}

好吧,它确实可能行不通,首先因为我们不知道“ram_tx”是什么(尤其是他的类型),而且因为代码非常可疑。

您将 a 声明为“char [4]”,然后执行“a(1)”。你明白这里,你用参数“1”调用了一个名为“a”的函数?即使您通过输入“a [1]”或只是“a”来纠正这个问题,以便将数组复制到 ram_tx 中,好吧,即使 ram_tx 是一个指针数组(因为让你的所有指针都指向一个?)。

了解在每个 for 循环中,您将删除“a”的先前值。 “ram_tx”对显示负责吗?如果是,您可以添加分隔符以了解“a”真正包含的内容吗? 此外,“ram_tx”是否在等待 '\0' ?因为你不添加它,它可能是“添加”一些你不想要的垃圾值。

【讨论】:

  • 是的,但我们不知道 OP 是在谈论 nul 终止的字符串还是只是字节字符串。
  • 另外,当突然发布代码时,最好是真正好的代码。
  • 当问题太宽泛时会发生这种情况:)
  • 代码唯一的问题是如果字符串不是256个字符长度,il会“拆分”垃圾值。但问题很明确:输入字符串的长度为 256 个字符。
  • 这段代码涵盖了“空终止字符串”和“字节字符串”两种情况——如果它们是字节字符串,它只会浪费每个字符串 1 个字节。如果平台因为使用了 64 字节而出现问题,它不能浪费,这几天很不寻常
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-04
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多