我正在尝试读取缓冲区,复制所有非字母字符并将其转储到另一个缓冲区。
我遇到的问题是,每当遇到非数字字符时,它都不会再复制任何内容。
我尝试检测空格,使用辅助缓冲区...
int main(void)
{
char buffer[] = "103 PLUS 1";
char buffer2[] = "a";
int i, number;
memset(buffer2, 0, sizeof (buffer2));
size_t length = strlen(buffer);
fprintf(stdout,"Buffer initially: %s \n", buffer);
fprintf(stdout,"Buffer2 initially: %s \n", buffer2);
for(i=0; i<length; i++)
{
if (number = isalpha(buffer[i]) == 0)
{
strncpy(&buffer2[i], &buffer[i], 1);
}
}
fprintf(stdout, "Copied buffer is: %s \n", buffer2);
return 0;
}
提前致谢。
最佳答案
- 您的代码将
buffer2
的第一个元素保留为 0,表示 C 字符串的结尾。事实上,相同字符的索引在buffer
和buffer2
中应该是不同的,因为字符在C字符串中必须是一致的,但有些字符不会被复制。 - 没有必要用
"a"
初始化buffer
。请改用{0}
。 - 您不需要使用变量
number
。
精简代码:
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int main(void)
{
char buffer[80] = "103 PLUS 1";
char buffer2[80] = {0};
int i, j = 0;
size_t length = strlen(buffer);
fprintf(stdout,"Buffer initially: %s \n", buffer);
fprintf(stdout,"Buffer2 initially: %s \n", buffer2);
for(i = 0; i < length; i++)
{
if (isalpha(buffer[i]))
{
strncpy(&buffer2[j++], &buffer[i], 1);
}
}
fprintf(stdout, "Copied buffer is: %s \n", buffer2);
return 0;
}
输出:
Buffer initially: 103 PLUS 1
Buffer2 initially:
Copied buffer is: PLUS
关于c - 过滤一个缓冲区并将其复制到另一个 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36749343/