php strlen函数无法正常工作

时间:2017-04-26 11:55:12

标签: php

当我回显给定变量时,strlen函数正常工作,但当我使用stdin 输入时,strlen不会按预期工作。

<?php   
function CheckUsername($username){
  $static ="This is a pen";
  echo strlen($static);

  **Output:13**
  **usng stdin (same input:This is a pen)**

  echo (strlen($username));

  **output:4**
}

$stdin = fopen('php://stdin','r');
$stdout = fopen('php://stdout','w');
$testCase = 0; 
$username = 0;

fscanf(STDIN,"%d\n",$testCase); 
for($i=0;$i<$testCase;$i++) {
  fscanf(STDIN,"%s\n",$username); 
  $result = CheckUsername($username); 

  fprintf(STDOUT,"%s\n",$result); 
}

为什么结果不是13?

1 个答案:

答案 0 :(得分:1)

您的问题与STDIN无关,但与fscanf()的工作方式有关,简而言之就是sscanf()从文件指针读取。

并且......如下所示,它将空格视为%s令牌之间的分隔符

$ php -a
Interactive mode enabled

php > var_dump(sscanf("This is a pen", "%s\n"));
php shell code:1:
array(1) {
  [0] =>
  string(4) "This"
}

如果你坚持使用fscanf(),一个鲜为人知的特性是它也接受类似正则表达式的字符类,所以你可以告诉它寻找任何不是换行符的东西:< / p>

php > var_dump(sscanf("This is a pen", "%[^\n]"));
php shell code:1:
array(1) {
  [0] =>
  string(13) "This is a pen"
}

但是,此时我不得不质疑你为什么要使用fscanf()代替fgets(),这正是这样做 - 读取整行,停在\n