我正在尝试使用 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/