C语言字符串赋值给数组/char *

字符串(c语言):

以“abcd”为例,解释如下:

1. 申请了空间(在常量区),存放了字符串 
2. 在字符串尾加上了’/0′    
3. 返回地址

一定记清楚!!

 

1. 字符串赋值给char *  

int main(int argc, const char *argv[])
{
    char *p1 = "hello";
    printf("p1[0] = %c\n", *p1);
    printf("%s\n", p1);

    char *p2 = NULL;
    p2 = "world";
    printf("p2[0] = %c\n", *p2);
    printf("%s\n", p2);

    return 0;
}

《C语言字符串赋值给数组/char *》

小结:以下两种形式赋值效果相同

 

char *p1 = “hello”;

 

 char *p2 = NULL;

 p2 = “world”;

2. 字符串赋值给数组

1) 字符串赋值给定长数组

int main(int argc, const char *argv[])
{
    char p1[10] = "hello";
    printf("%s", p1);

    return 0;
}

/* 结果输出:

hello

*/
int main(int argc, const char *argv[])
{
    char p2[10];
    p2 = "hello";

    return 0;
}

/*
../src/demon.c: In function 'main':
../src/demon.c:46:8: error: assignment to expression with array type
   46 |     p2 = "hello";
      |        ^
../src/demon.c:45:10: warning: variable 'p2' set but not used [-Wunused-but-set-variable]
   45 |     char p2[10];
      |          ^~
*/

小结:以下两种形式不同

 

char p1[10] = “hello”;

 

char p2[10];

p2 = “hello”;

对于第二种形式的理解: “hello”赋值的值是一个地址,p2是一个常量地址却。因此不能将字符串的地址赋值给一个常量

2)字符串赋值给未知长度数组

int main(int argc, const char *argv[])
{
    char p[] = "hello";

    printf("%s", p);
    printf("sizeof(p[]) = %d", (int)sizeof(p));

    return 0;
}

/*结果输出:
> Executing task: .\bin\demon.exe <

hello
sizeof(p[]) = 6
终端将被任务重用,按任意键关闭。
*/

char str[] = "hello";
因为定义的是一个字符数组,所以就相当于定义了一些空间来存放"hello",而又因为字符数组就是把字符一个一个地存放的,所以编译器把这个语句解析为
char str[6] = {'h','e','l','l','o','\0'};

小结:字符串赋值给不定长度的数组时,sizeof数组计算出来的长度结果中是包含‘\0’的。

    原文作者:转小小
    原文地址: https://blog.csdn.net/LittleWhite_Ling/article/details/113249530
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞