zoukankan      html  css  js  c++  java
  • 字符数组初始化与赋值

    char a[10];
    怎么给这个数组赋值呢?
    1、定义的时候直接用字符串赋值
    char a[10]="hello";
    注意:不能先定义再给它赋值,如char a[10]; a[10]="hello";这样是错误的!
    2、对数组中字符逐个赋值
    char a[10]={'h','e','l','l','o'};
    3、利用strcpy
    char a[10]; strcpy(a, "hello");

    易错情况:
    1、char a[10]; a[10]="hello";//一个字符怎么能容纳一个字符串?况且a[10]也是不存在的!
    2、char a[10]; a="hello";//这种情况容易出现,a虽然是指针,但是它已经指向在堆栈中分配的10个字符空间,现在这个情况a又指向数据区中的hello常量,这里的指针a出现混乱,不允许!

    还有:不能使用关系运算符“==”来比较两个字符串,只能用strcmp() 函数来处理。


    C语言的运算符根本无法操作字符串。在C语言中把字符串当作数组来处理,因此,对字符串的限制方式和对数组的一样,特别是,它们都不能用C语言的运算符进行复制和比较操作。

    直接尝试对字符串进行复制或比较操作会失败。例如,假定str1和str2有如下声明:

    char str1[10], str2[10];

    利用=运算符来把字符串复制到字符数组中是不可能的:

    str1 = "abc";     /*** WRONG ***/

    str2 = str1;       /*** WRONG ***/

    C语言把这些语句解释为一个指针与另一个指针之间的(非法的)赋值运算。但是,使用=初始化字符数组是合法的:

    char str1[10] = "abc";

    这是因为在声明中,=不是赋值运算符。

    试图使用关系运算符或判等运算符来比较字符串是合法的,但不会产生预期的结果:

    if (str1==str2) ...    /*** WRONG ***/

    这条语句把str1和str2作为指针来进行比较,而不是比较两个数组的内容。因为str1和str2有不同的地址,所以表达式str1 == str2的值一定为0

  • 相关阅读:
    无法重用Linq2Entity Query
    The Joel Test
    MSBuilder directly instead of default VSComplie with keyborad shotcut 原创
    客户端缓存(Client Cache)
    关于代码重构和UT的一些想法,求砖头
    ExtJS2.0实用简明教程 应用ExtJS
    Perl information,doc,module document and FAQ.
    使用 ConTest 进行多线程单元测试 为什么并行测试很困难以及如何使用 ConTest 辅助测试
    史上最简单的Hibernate入门简介
    汽车常识全面介绍 传动系统
  • 原文地址:https://www.cnblogs.com/fenghuan/p/4788588.html
Copyright © 2011-2022 走看看