zoukankan      html  css  js  c++  java
  • 0, , NULL

    字符串、字符数组输入、输出与''的问题
    原创首发,欢迎转载!
    作者按
    字符串、字符数组以"%s"格式输入时,以遇到'空格'为这个字符串输入结束。
    字符串、字符数组以"%s"格式输出时,以遇到的第一个''为输出结束标记!
    C程序设计(谭浩强,第二版,P134)
    *************************************************************************
    平台为VS2008。
    Example1:
    #include "stdafx.h"
    #include <conio.h>
    int _tmain(int argc, _TCHAR* argv[])
    {
    char str[6] = {'a', 'b', '4', 'd', 'e', 'f'};          //没有字符串结束标记''
    printf("%s", str);
    getch();
    return 0;
    }
    输出:ab4def
    其实紧接着ef后面还有乱码。(原因就是没有'',所以没有停止输出)。
    *************************************************************************
    Example2
    #include "stdafx.h"
    #include <conio.h>
    int _tmain(int argc, _TCHAR* argv[])
    {
    char str[6] = {'a', 'b', '', 'd', '', 'f'};
    printf("%s", str);
    getch();
    return 0;
    }
    输出:ab
    综合Example1和Example2,说明——字符串、字符数组以"%s"格式输出时,以遇到的第一个''为输出结束标记!
    这个规律对puts()同样有效。
    补充:''对应ASII的值为0,即为空。MAC前2个字符"00"---->0x00---->以"%s"形式输出---->结果就是什么都没有输出
    *************************************************************************
    Example3
    #include "stdafx.h"
    int _tmain(int argc, _TCHAR* argv[])
    {
    char * str = (char *)malloc(8);
    scanf("%s", str);
    printf("%s", str);
    getch();
    return 0;
    }
    输入:GGGL HF
    输出:GGGL
    *************************************************************************
    Example4
    #include "stdafx.h"
    int _tmain(int argc, _TCHAR* argv[])
    {
    char * str0 = (char *)malloc(10);
    char * str1 = (char *)malloc(10);
    char * str2 = (char *)malloc(10);
    scanf("%s%s%s", str0, str1, str2);
    printf("%s
    %s
    %s
    ", str0, str1, str2);
    getch();
    return 0;
    }
    输入:GG GL HF
    输出:
    GG
    GL
    HF
    字符串、字符数组以"%s"(使用scanf/sscanf函数时)格式输入时,以遇到'空格'为这个字符串输入结束。
    使用gets()函数则不符合这个规律。
    
    **************************************************************************
    Example5
    #include "stdafx.h"
    int _tmain(int argc, _TCHAR* argv[])
    {
    char * str0 = (char *)malloc(10);
    char * str1 = (char *)malloc(10);
    char * str2 = (char *)malloc(10);
    scanf("%s_%s_%s", str0, str1, str2);                                       //试图以输入'_'分割
    printf("%s
    %s
    %s
    ", str0, str1, str2);
    getch();
    return 0;
    }
    说明:试图以输入'_'分割,结果乱码。不解,待补充!
    
    
    
    
    
    
    空字符串(''),0和NULL的关系
    应该很多人都还没有认清空字符串('')和NULL的关系吧!!现在我来说明一下吧:
    先看一个例子:
    '' == NULL;
    '' === NULL;
    运行之后会发现第一个为true,第二个为false!
    
    为什么会这样呢?其实在PHP中空字符串和NULL都是以值为0存储的!而==只比较值,所以第一个为true!但是第二个为什么是false呢!?
    原因是在PHP中变量是以C语言的结构体来存储的,其中这个结构体有个zend_uchar type;这样的成员变量,他是用来保存变量的类型的,而空字符串的类型是string而NULL的类型是NULL。这一点可以用echo gettype('');和echo gettype(NULL);来打印看看!而===运算符是不单比较值,还有比较类型的,所以第二个为false!
    
    所以可以这样说===是等于下面的函数:
    [php]
    function eq($var1, $var2) {
            if($var1 == $var2 && gettype($var1) == gettype($var2)) {
                    return 1;
            } else {
                    return 0;
            }
    }
    [/php]
    
    所以空字符串(''),NULL和0是值相等而类型不一样!
    说得没错!所以变量没有赋值之前绝对不是等于空字符串的!而是NULL!
    单引号 或双引号 里面有空格就不是 NULL 了。不家小心就出错。
    
    === 比较类型和值
    == 只比较值
    字符串遇到整数会转为整型.这个 php官方有 .
    
    
    
    "并又具有空格的作用" -- 应当叫 “空白”,英文叫 white space. 打出空白的键(或 ASCII 值)有好些个,空格也是其中之一。 
    
    空格 是键盘上 那个长条键产生的码, ASCII 值是 0x20.  字符串的终止符 是 null, ASCII 值是 0x00.
    
    C++实习题要求去掉字符串末尾的所有空格,一般要求是去掉0x20,就是 ' 'char str[]="abc 123..   ";
    int i,L;
    L = strlen(str);  //  得字符串长度
    for (i=L-1;i>0;i--){  // 从尾巴找起,找到非空白为止
    if (str[i]==' ' && str[i-1] != ' ') {
    str[i] = ''; // 处理方法
    break;
    }
    }
    
    
    
    
    
    
    空字符用'',0,还是NULL? 
    用NULL的代码还挺多的。while (c!=NULL) 
    
    这个显然是错的,NULL 只能表示空指针,gcc 都会警告 
    warning: NULL used in arithmetic 
    我用 '' 
    
    while (str != NULL && *str != NULL)这么看着怪怪的 
    
    NULL 是且仅是空指针,当然是乱用。这里能编译过那里就报 warning 
    
    空字符串是""'' 仅是一个字符而不是一个串 
    
    空字符是吧。NULL是空指针。
    
    参考 你必须知道的495个C语言问题  
  • 相关阅读:
    String Kernel SVM
    基因组印记
    用Js的eval解析JSON中的注意点
    struts2中<s:select>标签的使用
    如何在Linux中使用cron命令
    怎样解决MySQL数据库主从复制延迟的问题
    PMON failed to acquire latch, see PMON dump
    java中对List中对象排序实现
    C语言typedef关键字
    企业级内部信息统一搜索解决方案
  • 原文地址:https://www.cnblogs.com/timssd/p/4078311.html
Copyright © 2011-2022 走看看