0 0

C语言字符串与字符数组5

#include "stdafx.h"
#include "string.h"

int main(int argc, char* argv[])
{
	//char b[5] = {"hello"};  //编译时报错
	char b[6] = {"hello"};
	//或
	//char b = {"hello"}; //正确
	char a[5] = {'h', 'e', 'l', 'l', 'o'};
	printf("hello:%s\n", b);
	printf("b length is : %d\n", strlen(b));
	printf("a length is : %d\n", strlen(a));
	return 0;
}

此时的输出如下

如果将代码
char a[5] = {'h', 'e', 'l', 'l', 'o'};

修改为
char a[6] = {'h', 'e', 'l', 'l', 'o', '\0'};

则输出为


问题:
1.为什么第一次的执行“printf("a length is : %d\n", strlen(a));”的输出结果是“13”?
2.对于'\0'是不是字符串会自动在后面加上而字符数组中则不会加上,那么字符数组中何时会出现'\0'字符?

问题补充:
grhappygr 写道
楼上有几个错误,字符串数组有时不会填\0,当数组大小等于字符串大小的时候没有位置添加\0,也就是说b[n>5]="hello"的情况时才会添加\0,所以b[6]时strlen()正确,因为strlen以“\0"判断,这点要和sizeof区分
而出现11的情况,你要懂得a,b的内存分配,其实是a连接在了没有\0结尾的b上得结果,可以查看a,b的地址printf("%X %X",&a,&b)来判断;


printf("a = %x, b = %x, a[1] = %x, a[2] = %x, a[3] = %x, a[4] = %x, a[5] = %x,a[4] = %x, a[5] = %x \n", a, b, &a[1], &a[2], &a[3], &a[4], &a[5], &a[6], &a[7]);
printf("a[5] = %d, a[6] = %d, a[7] = %d, b[5] = %d\n", a[5], a[6], a[7], b[5]);

            输出结果如下:
a = 12ff70, b = 12ff78, a[1] = 12ff71, a[2] = 12ff72, a[3] = 12ff73, a[4] = 12ff
74, a[5] = 12ff75,a[4] = 12ff76, a[5] = 12ff77
a[5] = -52, a[6] = -52, a[7] = -52, b[5] = 0

            字符'\0'对应的ASCII妈值为0,ASCII值为0的字符对应的为空字符'NUL',不执行任何操作,对程序无影响。
C 
2011年10月13日 23:18
  • 大小: 10.8 KB
  • 大小: 11.3 KB

3个答案 按时间排序 按投票排序

0 0

采纳的答案

楼上有几个错误,字符串数组有时不会填\0,当数组大小等于字符串大小的时候没有位置添加\0,也就是说b[n>5]="hello"的情况时才会添加\0,所以b[6]时strlen()正确,因为strlen以“\0"判断,这点要和sizeof区分
而出现11的情况,你要懂得a,b的内存分配,其实是a连接在了没有\0结尾的b上得结果,可以查看a,b的地址printf("%X %X",&a,&b)来判断;

2011年10月16日 00:15
0 0

字符串他默认后面会帮你加'\0',计算strlen的时候,他是从首地址开始hello中的h开始,一直碰到第一个'\0'才返回了。计算之间的字符个数。不同的电脑可能算出来a的长度不尽相同,跟内存有关。。好久没用C了。。

2011年10月14日 08:54
0 0

字符串是和数组不是一个概念,字符串肯定加,但是数组不会呀。。。。除非定义的时候初始化

2011年10月13日 23:24

相关推荐

    C语言字符串拆分成字符串数组.c

    纯C语言实现字符串拆分操作,把字符串拆分成字符串数组,然后再输出。 使用sstream方法,作为底层驱动操作实现非常方便。

    C语言字符串练习(习题+答案).zip

    8. 字符数组与字符串的关系:理解如何在字符数组中操作字符串,包括动态分配内存和释放内存。 在解题过程中,"C语言练习字符串答案.txt"文件提供了参考解答,帮助学习者检查自己的理解是否正确,或者提供解题思路。...

    C语言数组:C语言数组定义、二维数组、动态数组、字符串数组_C语言中文网1

    6.5 C语言字符串处理函数 C语言中的字符串处理函数提供了丰富的功能,如`printf("%s", str)`用于打印字符串,`gets()`和`sprintf()`用于读写字符串,`strchr()`查找子串,`strstr()`查找字符串出现的位置等。 6.6 ...

    C语言 获取字符串中的数组

    C语言 获取字符串中的数组C语言 获取字符串中的数组C语言 获取字符串中的数组C语言 获取字符串中的数组

    C语言用指针将字符串数组位置颠倒

    C语言用指针将字符串数组位置颠倒,实现ABCDEFGHIJKLMNOPQRSTUVWXYZ转换成ZYXWVUTSRQPONNOPQRSTUVWXYZ

    C语言字符串及字符数组操作

    C语言中,字符的操作有多种方法,这里主要是特有的字符串库函数进行操作,简化编程过程,增强学生对字符串及字符操作的理解。

    C语言字符串快速压缩算法代码

    以上就是C语言字符串快速压缩算法的实现细节。这个算法体现了C语言中对字符串的基本操作,包括字符数组的使用、字符串函数(如`strlen`)的调用以及自定义字符串处理逻辑。同时,它也展示了如何处理多种情况和数据...

    C语言字符串数组[参考].pdf

    C语言字符串数组是指以字符数组形式存储的字符串,在C语言中,字符串作为字符数组来处理。字符数组的初始化可以用逐个字符赋值的方式,例如`char str[10]={ 'I',' ','a','m',' ','h','a','p','p','y'};`,也可以用...

    C语言字符数组与字符串的使用详解[归类].pdf

    C语言字符数组与字符串的使用详解 C语言中,字符数组和字符串是两个紧密相关的概念。字符数组是指由多个字符组成的数组,而字符串则是指一个以`\0`结尾的字符序列。在C语言中,字符串可以看作是一个特殊的字符数组...

    C语言字符数组与字符串.ppt

    字符数组的概念、使用 字符串的概念 字符数组与字符串的关系 常用字符串处理函数的使用

    C语言字符数组初始化

    #### 二、字符数组与字符串 1. **字符串的概念**: - 在C语言中,字符串被视作一个字符数组,其中最后一个字符必须是字符串终止符`'\0'`。 - 例如,`"C Program"`实际上占用10个字节的空间,其中前9个字节存放...

    字符数组转换成字符串

    字符数组转换成字符串是常见的操作,尤其在C语言及其衍生的编程语言中。这个过程涉及到字符数组的处理、字符串的定义以及数据类型间的转换。下面我们将详细探讨这一主题。 首先,我们要了解字符数组和字符串的基本...

    C语言字符串数组.pdf

    在C语言中,字符串是一种特殊的字符数组,它们以空字符'\0'作为结束标识。本文主要探讨了C语言中字符数组的定义、初始化以及字符串的表示形式。 首先,字符数组的定义与初始化是通过声明一个字符类型(char)的数组来...

    C语言中的字符串数组和字符串指针

    本文档在某知名网站下载,要么浏览量最多,要么最新,保证精品,至少为你节约3RMB。格式为caj或者kdh需要专业阅读器打开。

    C语言字符串指针(指向字符串的指针)_C语言中文网1

    由于C语言并没有专门的字符串类型,我们通常使用字符数组来表示字符串。然而,指针是C语言中非常重要的一个概念,它能指向内存中的任何数据。在处理字符串时,我们可以使用指针来操作字符串,这就是所谓的“字符串...

    C语言字符串操作大全

    接下来详细说明标题和描述中提及的C语言字符串操作函数。 首先,`strcpy` 函数的用途是将源字符串 `source` 完整拷贝到目标字符串 `destin` 中,并且包括源字符串的终止符 '\0'。这个函数不会检查目标数组是否有...

    c语言字符串数组输入输出.txt

    c语言字符串数组输入输出

    C语言程序设计数组C语言程序设计数组C语言程序设计数组C语言程序设计数组C语言程序设计数组C语言程序设计数组C语言程序设计数组

    字符数组与字符串是密切相关的概念。在C语言中,字符串是零结尾的字符序列,可以被看作是字符数组。`'\0'`字符用于标记字符串的结束。字符数组可以用来存储和操作字符串,例如`strcpy`、`strcat`、`strlen`等函数...

    c语言输入字符串数组四组输入字符串数组

    基本的C语言字符串输入通常使用`scanf()`函数,如下所示: ```c char strings[SIZE][100]; scanf("%s", strings[i]); ``` 这里,`strings`是一个二维字符数组,`SIZE`是数组的大小,`100`是每个字符串的最大...

    c语言实现字符串分割split()

    c语言实现字符串分割split(), 实现C语言实现按分隔符来截取字符串

Global site tag (gtag.js) - Google Analytics