C语言字符串测试

今天写代码用到了字符串,需要利用字符串结尾符'\0'判断是否遍历完毕,然后产生了相应的困惑

1.字符串数组是否都具有结尾符?

2.二维字符串数组每一行是否等同于一维字符串数组?

 

首先说结论:c语言字符串数组都具有结尾符'\0';二位字符串数组每一行等同于一维字符串数组;

 

运行一下测试代码:




#include <cstdio>
using namespace std;

int main() {
	
	int i;

	char str1[] = {"123"}; //等同于 char str1[] = "123"; 
	char str2[3] = {'4', '5', '\0'};  //人工添加结尾符 
	char str3[3] = {'6','7','8'}; //不规范 
	char str3_2[3] = {'9'};
	// char str4[3] = {'1','2', '3', '\0'}; //声明错误,检测到数组空间不足
	
	printf("输出str1:");
	for (i = 0; str1[i]; i++) 
		printf("%c", str1[i]);
	printf("\nstr1结尾符的位置: %d", i);
	
	printf("\n");
	
	printf("输出str2:");
	for (i = 0; str2[i]; i++) 
		printf("%c", str2[i]);
	printf("\nstr2结尾符的位置: %d", i);
	
	printf("\n");
	
	printf("输出str3:");
	for (i = 0; str3[i]; i++) 
		printf("%c", str3[i]);
	printf("\nstr3结尾符的位置: %d", i);
	
	printf("\n");
	
	printf("输出str3_2:");
	for (i = 0; str3_2[i]; i++) 
		printf("%c", str3_2[i]);
	printf("\nstr3_2结尾符的位置: %d", i);
	
	return 0;
}

运行结果:

 

分析:

列举出可能的赋值形式 ,并最终判断结尾符'\0'来结束输出。由于每次都能输出'\0'的位置数值,可以确定字符串数组结束符一定存在。但如果以不规范的形式赋值,即如同上述str3的形式,结束符空间将不能确定,可能用到了别的 变量的空间。如果单独以不规范的形式测试,则结果会是结束符位置的值为数组空间大小加1(原因暂时未找到),如下图:

#include <cstdio>
using namespace std;

int main() {
	
	int i;

	char str3[3] = {'6','7','8'}; //不规范 
	
	
	for (i = 0; str3[i]; i++) 
		printf("%c", str3[i]);
	printf("\n%d", i);
	
	printf("\n");
	
	return 0;
}

posted @ 2019-02-21 14:04  JonnyOu1012  阅读(55)  评论(0编辑  收藏  举报