【问题标题】:How to filter alphanumeric characters from char *如何从 char * 中过滤字母数字字符
【发布时间】:2014-04-09 23:23:20
【问题描述】:

我正在创建一个共享对象,它过滤从 char* buff_in 接收的字母数字字符并将它们复制到 char *buff_out,现在我的代码正在执行我想要的操作,但它会在数字之间创建 ^@。

int tratar(char* buff_in, char* buff_out){
 int i = 0;

while(buff_in[i]){
 if(!isalpha(buff_in[i])){
    buff_out[i] = buff_in[i];
   }
  i++;
 }
 printf("%s", buff_out);
}  

如果我运行程序,一切看起来都不错,但是当我在编辑器中查看返回值时,我看到:^@^@^@ ^@^@ 1 ^@^@^^@ ^@ 10 ^@^ @^@ 50 ^@^@^@。当它应该只有 1 10 50 时。

谢谢

【问题讨论】:

  • 您需要不同的索引(或指针)来分配累积的输出字符。如果前两个字符是 alpha 怎么办?您开始将第三个输入字符写入输出缓冲区中的 third 槽。
  • 使用isalpha() 需要if(!isalpha((unsigned char) buff_in[i])){ 应该签名char

标签: c filter char alphanumeric


【解决方案1】:

你需要一个不同的 buff_out 索引:

int i = 0, j = 0;
...
buff_out[j++] = buff_in[i];

另外,在 printf() 之前空终止 buff_out:

buff_out[j] = '\0';

【讨论】:

    猜你喜欢
    • 2011-07-13
    • 2021-12-03
    • 1970-01-01
    • 2013-01-12
    • 2016-01-05
    • 1970-01-01
    • 2013-06-14
    • 2015-07-16
    • 2013-12-30
    相关资源
    最近更新 更多