c - 将字符串拆分为 block 。

标签 c string chars

我正在尝试使用 C 将一个字符串分成 6 个 block ,但我遇到了困难。如果您输入 12 个字符长的字符串,它只会打印两个不寻常的字符。

#include <stdio.h>
#include <string.h>

void stringSplit(char string[50])
{
    int counter = 0;
    char chunk[7];

    for (unsigned int i = 0; i < strlen(string); i++)
    {
        if (string[i] == ' ')
        {
            continue;
        }

        int lastElement = strlen(chunk) - 1;
        chunk[lastElement] = string[i];
        counter++;

        if (counter == 6)
        {
            printf(chunk);
            memset(chunk, '\0', sizeof chunk);
            counter = 0;
        }
    }
    if (chunk != NULL)
    {
        printf(chunk);
    }

}

int main()
{
    char string[50];
    printf("Input string. \n");
    fgets(string, 50, stdin);
    stringSplit(string);
    return(0);
}

我很感激任何帮助。

最佳答案

您的问题位于

int lastElement = strlen(chunk) - 1;

首先,strlen 计算直到 NUL 字符的字符数。您的数组最初未初始化,因此这可能会导致问题。

假设您的数组充满了 NUL,并且您在开头有 2 个字符,并且您希望放置第三个字符。请记住,您的 2 个角色分别位于位置 0 和 1。因此,strlen 将返回 2(您的字符串有 2 个字符),减去 1,因此 lastElement 变量现在的值为 1。然后将第三个字符放置在索引 1 处,从而覆盖已有的第二个字符。

此外,这是非常低效的,因为您每次都计算字符数。但是等等,您已经知道您有多少个字符(您在 counter 中计算它们,不是吗?)。那么为什么不使用 counter 来计算新字符应放置的索引呢? (小心不要犯同样的错误并覆盖其他内容)。

关于c - 将字符串拆分为 block 。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42373252/

相关文章:

c - 同一进程中线程的进程id

c - Windows CE 上的 libcurl - curl_easy_perform(...) 不返回

c - C 中是否可以使用按位运算符生成 x%10(模 10)?

string - 如何将字符串中的服务器名称与端口号分开?

构建哈希表/哈希函数

java - 如何过滤整数并将它们从字符串复制到新数组

rust - 如何使用 Rust 从 stdin 创建一个高效的字符迭代器?

c - 如何测试 FILE*(指向结构的指针)(如果 == NULL)?

php - 如何在php中将十六进制转换为字符串或文本