首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >isspace :只需要标识空格,而不是其他字符。

isspace :只需要标识空格,而不是其他字符。
EN

Stack Overflow用户
提问于 2014-03-13 07:41:52
回答 1查看 193关注 0票数 0

我有一段代码,其中SAS正在调用一个C程序来读/写一个VSAM文件。

代码语言:javascript
复制
char *ltrim(char *s)
{    
    while(isspace(*s)) s++;

    return s;    
}

char *rtrim(char *s)
{     
    char* back = s + strlen(s);

    while(isspace(*--back));

    *(back+1) = '\0';

    return s;    
}

char *trim(char *s)
{    
    return rtrim(ltrim(s));    
}

它是这样命名的

代码语言:javascript
复制
strlen(trim(XXXX))

99999899.99这样的值存在于XXXX中。这将写入到VSAM文件中的COMP-3文件中。因此,在十六进制中,写入输出文件的值将以0X990X890X900X0C结尾。

我发现了一个问题,即程序删除了0C函数中的trimrtrim函数只在值为99999899.00时才执行此操作。如果值为99999899.99,则不会发现任何问题。如果值小于99999899.00,则不会发现任何问题。直到我阅读到isspace函数还考虑了以下所有内容( http://www.cplusplus.com/reference/cctype/isspace/ )之前,我才发现它是相当奇怪的:

  • ' ' (0x20) space (SPC)
  • '\t' (0x09) horizontal tab (TAB)
  • '\n' (0x0a) newline (LF)
  • '\v' (0x0b) vertical tab (VT)
  • '\f' (0x0c) feed (FF)
  • '\r' (0x0d) carriage return (CR)

我很确定作者只想删除空格。总之,我只想删除空格,而不是(0X0c) Feed (FF)。那么我能用什么代替这两行呢?

代码语言:javascript
复制
while(isspace(*--back));
*(back+1) = '\0';
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-13 07:46:04

isspace(X)替换为X == ' '

顺便说一句,如果字符串完全由空格(或字符串为空)组成,则rtrim函数将导致未定义的行为,它将从数组的前端运行。你可能想重新设计它,或者至少让它在撞到前面的时候停下来。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22372116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档