本帖最后由 jackz007 于 2019-12-22 12:40 编辑
两个问题:
1、通过 fgets() 获取的字符串最后那个字符一定是换行符 '\n',而这个换行符显然并非我们所预期,所以,应该检测换行符,而不是 '\0';
2、if(ch < 0) 时,target ++ 就够了,target += 2 就过了。 ch = * target++ ; // 这里 target 加过了
. . . . . .
if ((int)ch < 0)
{
target += 2 ; // 这里 target 应该 + 1,+ 2 就错了。
下面是我修改的版本,供楼主参考#include <stdio.h>
#define MAX 1024
int main()
{
char str[MAX] ;
char * target = str ;
int length = 0 ;
printf("请输入一个字符串:") ;
fgets(str , MAX , stdin) ;
for(length = 0 ; length < MAX && * target != '\n' ; length ++ , target ++) if(* target < 0) target ++ ;
* target = '\0' ;
printf("您总共输入了 %d 个字符!\n", length) ;
}
编译、运行实况:C:\Bin>g++ -o x x.c
C:\Bin>x
请输入一个字符串:TDM GCC32 5.1.0 开发环境设置完毕
您总共输入了 24 个字符!
C:\Bin>
|