空闲时候思考2('\0'等价于数字0还是字符0)

本文通过几个具体的示例,详细探讨了C++中字符串数组的初始化方式及其对sizeof和strlen函数的影响,解释了如何正确地使用这些函数来获取字符串长度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**********************************************************************      
* *   Copyright (c)2015,WK Studios    
* *   Filename:  A.h  
* *   Compiler: GCC  vc 6.0     
* *   Author:WK      
* *   Time: 2015 6 7  
* **********************************************************************/  
#include<iostream>
using namespace std;
int  main()
{
	char a[100]={'0',48,48,0,0,'0'};
	char b[]={'0',48,48,0,0,'0'};
	char c[]={'0','0'};
	char d[]={0};
	//注意一下数字0与字符'0'区别
	//'\0'等价于数字0而不是字符0
	cout<<sizeof(a)<<endl;
	cout<<strlen(a)<<endl;
	cout<<sizeof(b)<<endl;
	cout<<strlen(b)<<endl;
	cout<<sizeof(c)<<endl;
	cout<<strlen(c)<<endl;
	cout<<sizeof(d)<<endl;
	cout<<strlen(d)<<endl;     return 0;  }

运行结果:

100

3

6

3

2

7

1

0

不行的话再看一个:

#include <iostream>
using namespace std;


void example()
{
	int i;
	char acNew[20];
	for(i = 0; i < 5; i++)
	{
		acNew[i] = '0' ;
	}
	printf("%d\n",strlen(acNew));
	return ;
}

void main()
{
	example();	
}
结果是一个随机的值,因为strlen没有找到结束的表示符‘\0’

稍微改动一下:

#include <iostream>
using namespace std;


void example()
{
	int i;
	char acNew[20];
	for(i = 0; i < 5; i++)
	{
		acNew[i] = 0 ; // '\1'  0
	}
	printf("%d\n",strlen(acNew));
	return ;
}

void main()
{
	example();	
}

这次结果是0


博图v17PLC梯形图(LAD)点击自动扫码,1秒后扫码枪扫码,工位 1显示字符串;1秒后,转台转一个工位,1 秒后,扫码枪扫码,工位2显示字符串; 1秒 后,转台转一个工位,1秒后,扫码枪扫码, 工位3显示字符串;1秒后,转台转一个工位, 1秒后,扫码枪扫码,工位4显示字符串 点击“字符清零”按钮,所有字符串清零 点击“扫码次数清零”按钮,扫码次数变为0 显示扫码次数,当状态在运转过程中,按下 急停按钮,转台停止运转// Network 1: 系统初始化与急停处理 A #EmergencyStop // 急停按钮按下 JCN M001 // 若未按下,跳过 L 0 // 复位运行状态 T #RunFlag T #State // 状态机复位 R #TurnTable // 停止转台 M001: NOP 0 // Network 2: 清零按钮处理 A #ClearText // 字符串清零按钮 S #DB1:Station1Text[0] S #DB1:Station2Text[0] S #DB1:Station3Text[0] S #DB1:Station4Text[0] // 字符串置空 A #ClearCount // 扫码次数清零 L 0 T #DB1:ScanCount // Network 3: 启动自动扫码流程 A #StartScan // 启动按钮按下 A !#RunFlag // 系统未运行时 JCN M002 S #RunFlag // 置位运行标志 L 1 // 进入状态1 T #State M002: NOP 0 // Network 4: 状态机主逻辑 A #RunFlag // 系统运行中 A !#EmergencyStop // 急停未触发 JN M003 JU M004 M003: CLR // 非运行状态复位 L 0 T #State BE M004: L #State // 加载当前状态 JL IST JU S0 S0: T #State // State 0: 空闲 BE S1: CALL TON "Delay" // State 1: 工位1延时1秒 IN := TRUE PT := T#1s Q => #T1.DN A #T1.DN JCN S1_END L 2 T #State // 进入状态2 S1_END: BE S2: A #ScanGun // State 2: 工位1扫码 JCN S2_END MOVE "SCAN1" TO #DB1:Station1Text // 显示字符串 INC #DB1:ScanCount // 扫码计数+1 L 3 T #State // 进入状态3 S2_END: BE // 状态3-6、7-10、11-14的处理逻辑与S1-S2类似 // (依次处理工位2/3/4的延时、扫码、显示) S15: CALL TON "Delay" // State 15: 工位4完成 IN := TRUE PT := T#1s Q => #T6.DN A #T6.DN JCN S15_END L 16 T #State // 进入状态16 S15_END: BE S16: L 0 // State 16: 流程结束 T #State R #RunFlag // 复位运行标志 BE 我需要功能块图
06-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值