当我回显给定变量时,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?
答案 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
。