아래 코드는 예상 한 부호없는 char 포인터의 길이가 다릅니다. pph와 pphChar에 대해 12 (또는 13) 또는 0 (또는 1)을 가져야한다고 생각했습니다. 내 문제는 무엇입니까? 나는 달리기를 반복 할 때마다 length와 oneLength에 대해 다른 결과를 얻습니다.unsigned char *에 대한 strlen을 얻는 올바른 방법은 무엇입니까?
pph 길이를 어떻게 알 수 있습니까?
길이를 결정하려면 끝에 '\ n'을 넣어야합니까?
저는 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 %d\n", 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 %d\n", sizeof(unsigned char));
length = strlen((const char*)phh);
int oneLength = strlen((const char*)phhChar);
printf("len %d\n", length);
printf("onelebgth %d\n", oneLength);
OUTPUT
32 렌 CHAR 1
13
크기 할당 MEM - 상이한마다
oneLength 32 - 다른마다
문자열을 0으로 종결하지 않으므로 결과가 임의적입니다. – bmargulies
BTW,'sizeof (char)'및'sizeof (unsigned char)'는 1로 보장됩니다. –
C++로 C를 작성할 수는 있지만 그 목적을 상회하지는 않습니다? – David