获取无符号字符 * 的 strlen 的正确方法是什么

what is the correct way to get strlen for a unsigned char *

本文关键字:方法 是什么 strlen 字符 获取 无符号      更新时间:2023-10-16

我下面的代码为我期望的无符号字符指针提供了不同的长度。我想我应该为 pph 和 pphChar 获得 12(或 13)或 0(或 1)。我的问题是什么? 当我重复运行时,每次我都会得到不同的长度和 oneLength 结果。

如何获取 pph 的长度?

我是否需要在末尾加上""来确定长度?

我使用VS2010,XP和C++。

#include "stdafx.h"
#include <stdlib.h>
#include <Windows.h>
#include <stdio.h>
#include <tchar.h>
typedef unsigned char uint8_t;
int _tmain(int argc, _TCHAR* argv[])
{
int length;
int len = 13;
uint8_t *phh;
char * phhChar;
printf("assigned mem %dn", sizeof(unsigned char)*len);
phh = (unsigned char *) malloc(sizeof(unsigned char)*len);
phhChar = (char *) malloc(sizeof(char)*len);
phh[0] = (unsigned char) '1';
phh[1] = (unsigned char) '2';
phh[2] = (unsigned char) '3';
phh[3] = (unsigned char) '4';
phh[4] = (unsigned char) '5';
phh[5] = (unsigned char) '6';
phh[6] = (unsigned char) '7';
phh[7] = (unsigned char) '8';
phh[8] = (unsigned char) '9';
phh[9] = (unsigned char) '0';
phh[10] = (unsigned char) '1';
phh[11] = (unsigned char) '2';
phh[12] = (unsigned char) 'n';
phhChar[0] = (char) 'n';
printf("size of char %dn", sizeof(unsigned  char));
length =  strlen((const char*)phh);
int oneLength = strlen((const char*)phhChar);
printf("len %dn", length );
printf("onelebgth %dn", oneLength);

输出

分配的内存 13

字符 1 的大小

len 32 - 每次都不同

一长度 32 - 每次都不同

您在字符串末尾缺少空终止符,因此strlen无法知道unsigned char *在哪里结束。

实际上,它会一直计数到您通过查看设置的最后一个字符的地址,直到它到达

strlen将根据终止字符(0 ( '' )计算长度。

这两种情况都相似:由于strlen正在寻找 0,但您只将'n'指定为"结尾",它将读取该字符,直到找到终止 0,它可能会在不同的地方找到,具体取决于内存恰好包含的"垃圾"

处理未终止的字符串

通常会导致分段错误,当读取"字符串"访问尚未为项目分配的内存时,该错误将终止程序。