在C语言中,并没有字符串的数据类型,是通过字符数组进行模拟。

下面的代码为字符串初始化的测试例子。

 

一、测试参考代码

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*c语言没有字符串类型,通过字符数组进行模拟
C语言字符串,以字符‘\0’, 数字0结尾
*/
int test01(void)
{
	//不指定长度, 没有0结束符,有多少个元素就有多长
	char buf[] = { 'a', 'b', 'c' ,'\0'};
	printf("buf = %s\n", buf);

	//指定长度,后面没有赋值的元素,自动补0
	char buf2[100] = { 'a', 'b', 'c' };
	printf("buf2 = %s\n", buf2);

	//所有元素赋值为0
	char buf3[100] = { 0 };

	//char buf4[2] = { '1', '2', '3' };//数组越界

	char buf5[50] = { '1', 'a', 'b', '0', '7' };
	printf("buf5 = %s\n", buf5);
	//buf5 = 1ab07

	char buf6[50] = { '1', 'a', 'b', 0, '7' };
	printf("buf6 = %s\n", buf6);
	//buf6 = 1ab

	char buf7[50] = { '1', 'a', 'b', '\0', '7' };
	printf("buf7 = %s\n", buf7);
	//buf7 = 1ab


	//使用字符串初始化,常用
	char buf8[] = "123456789";
	//strlen: 测字符串长度,不包含数字0,字符'\0'
	//sizeof:测数组长度,包含数字0,字符'\0'
	printf("strlen = %d, sizeof = %d\n", strlen(buf8), sizeof(buf8));
	//strlen = 9,sizeof = 10

	char buf9[100] = "123456789";
	printf("strlen = %d, sizeof = %d\n", strlen(buf9), sizeof(buf9));
	//strlen = 9,sizeof = 100

	printf("test..............");
	//\012相当于\n
	char str[] = "\0129";
	printf("%s\n", str);
	//换行9

	printf("\n");
	return 0;
}

int main(void)
{
	puts("*************************************************");
	test01();
	puts("*************************************************");

	char buf[] = "123456789";
	int n = strlen(buf);
	char *p = NULL;
	int i;
	//[]方式
	for (i = 0; i < n; i++)
	{
		printf("%c", buf[i]);
	}
	printf("\n");

	//指针方法
	//数组名字,数组首元素地址
	p = buf;
	for (i = 0; i < n; i++)
	{
		printf("%c", p[i]);
	}
	printf("\n");

	for (i = 0; i < n; i++)
	{
		printf("%c", *(p + i));
	}
	printf("\n");

	for (i = 0; i < n; i++)
	{
		printf("%c", *(buf + i));
	}
	printf("\n");

	//buf和p完全等价吗?
	//p++;
	//buf++;error
	//buf只是一个常量,不能修改

	printf("\n");
	system("pause");
	return 0;
}


 

二、测试结果(在VS2013上进行测试) 

 

字符串初始化总结

 

 

三、关键知识点总结

 

1、 0  、‘\0’ 、‘0’的区分

数字0就是数字0,在ASCII中为0。

‘\0’为字符创结束标志,等价于数字0,NUL '\0' (null character)。

‘0’为字符0,在ASCII中为48。

 

2、参考ASCII码表

       C program '\X' escapes are noted.

       Oct   Dec   Hex   Char                        Oct   Dec   Hex   Char
       ────────────────────────────────────────────────────────────────────────
       000   0     00    NUL '\0' (null character)   100   64    40    @
       001   1     01    SOH (start of heading)      101   65    41    A
       002   2     02    STX (start of text)         102   66    42    B
       003   3     03    ETX (end of text)           103   67    43    C
       004   4     04    EOT (end of transmission)   104   68    44    D
       005   5     05    ENQ (enquiry)               105   69    45    E
       006   6     06    ACK (acknowledge)           106   70    46    F
       007   7     07    BEL '\a' (bell)             107   71    47    G
       010   8     08    BS  '\b' (backspace)        110   72    48    H
       011   9     09    HT  '\t' (horizontal tab)   111   73    49    I
       012   10    0A    LF  '\n' (new line)         112   74    4A    J
       013   11    0B    VT  '\v' (vertical tab)     113   75    4B    K
       014   12    0C    FF  '\f' (form feed)        114   76    4C    L
       015   13    0D    CR  '\r' (carriage ret)     115   77    4D    M
       016   14    0E    SO  (shift out)             116   78    4E    N
       017   15    0F    SI  (shift in)              117   79    4F    O
       020   16    10    DLE (data link escape)      120   80    50    P
       021   17    11    DC1 (device control 1)      121   81    51    Q
       022   18    12    DC2 (device control 2)      122   82    52    R
       023   19    13    DC3 (device control 3)      123   83    53    S
       024   20    14    DC4 (device control 4)      124   84    54    T
       025   21    15    NAK (negative ack.)         125   85    55    U
       026   22    16    SYN (synchronous idle)      126   86    56    V
       027   23    17    ETB (end of trans. blk)     127   87    57    W
       030   24    18    CAN (cancel)                130   88    58    X
       031   25    19    EM  (end of medium)         131   89    59    Y
       032   26    1A    SUB (substitute)            132   90    5A    Z
       033   27    1B    ESC (escape)                133   91    5B    [
       034   28    1C    FS  (file separator)        134   92    5C    \  '\\'
       035   29    1D    GS  (group separator)       135   93    5D    ]
       036   30    1E    RS  (record separator)      136   94    5E    ^
       037   31    1F    US  (unit separator)        137   95    5F    _
       040   32    20    SPACE                       140   96    60    `
       041   33    21    !                           141   97    61    a
       042   34    22    "                           142   98    62    b
       043   35    23    #                           143   99    63    c
       044   36    24    $                           144   100   64    d
       045   37    25    %                           145   101   65    e
       046   38    26    &                           146   102   66    f
       047   39    27    '                           147   103   67    g
       050   40    28    (                           150   104   68    h
       051   41    29    )                           151   105   69    i
       052   42    2A    *                           152   106   6A    j
       053   43    2B    +                           153   107   6B    k
       054   44    2C    ,                           154   108   6C    l
       055   45    2D    -                           155   109   6D    m
       056   46    2E    .                           156   110   6E    n
       057   47    2F    /                           157   111   6F    o

       060   48    30    0                           160   112   70    p
       061   49    31    1                           161   113   71    q
       062   50    32    2                           162   114   72    r
       063   51    33    3                           163   115   73    s
       064   52    34    4                           164   116   74    t
       065   53    35    5                           165   117   75    u
       066   54    36    6                           166   118   76    v
       067   55    37    7                           167   119   77    w
       070   56    38    8                           170   120   78    x
       071   57    39    9                           171   121   79    y
       072   58    3A    :                           172   122   7A    z
       073   59    3B    ;                           173   123   7B    {
       074   60    3C    <                           174   124   7C    |
       075   61    3D    =                           175   125   7D    }
       076   62    3E    >                           176   126   7E    ~
       077   63    3F    ?                           177   127   7F    DEL

   Tables
       For convenience, below are more compact tables in hex and decimal.

          2 3 4 5 6 7       30 40 50 60 70 80 90 100 110 120
        -------------      ---------------------------------
       0:   0 @ P ` p     0:    (  2  <  F  P  Z  d   n   x
       1: ! 1 A Q a q     1:    )  3  =  G  Q  [  e   o   y
       2: " 2 B R b r     2:    *  4  >  H  R  \  f   p   z
       3: # 3 C S c s     3: !  +  5  ?  I  S  ]  g   q   {
       4: $ 4 D T d t     4: "  ,  6  @  J  T  ^  h   r   |
       5: % 5 E U e u     5: #  -  7  A  K  U  _  i   s   }
       6: & 6 F V f v     6: $  .  8  B  L  V  `  j   t   ~
       7: ' 7 G W g w     7: %  /  9  C  M  W  a  k   u  DEL
       8: ( 8 H X h x     8: &  0  :  D  N  X  b  l   v
       9: ) 9 I Y i y     9: '  1  ;  E  O  Y  c  m   w
       A: * : J Z j z
       B: + ; K [ k {
       C: , < L \ l |
       D: - = M ] m }
       E: . > N ^ n ~
       F: / ? O _ o DEL

 

3、strlen: 测字符串长度,不包含数字0,字符'\0'。
    sizeof:测数组长度,包含数字0,字符'\0'。

 

4、char buf [] = {1,2,3,4,5,6,7};

char *p =buf;

   //buf和p完全等价吗?
    //p++;
    //buf++;error
    //buf只是一个常量,是数组的首元素的地址,是不能修改,所以进行++操作是错误的。

 

 

 

相关文章:

  • 2022-12-23
  • 2019-08-21
  • 2022-12-23
  • 2022-12-23
  • 2021-09-13
  • 2022-12-23
  • 2021-09-25
  • 2021-06-18
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-08-22
  • 2021-04-08
  • 2022-02-22
  • 2021-07-06
  • 2021-09-05
相关资源
相似解决方案