草庐IT

CHAR_BIT

全部标签

c++ - 将 char 指针分配给数组

voidfun(chararr[]){cout为什么我允许传递一个char指针并在数组中接收它,但不能直接将char指针分配给数组。据我所知,当我们将参数传递给函数时,赋值是隐式发生的。那么为什么会有这种差异在行为上? 最佳答案 声明voidfun(chararr[]){相当于voidfun(char*arr){这意味着,在这种情况下,不需要将字符数组的大小传递给函数。现在arr指向与ptr相同的位置。但是如果是chararr2[]=ptr;编译器不知道ptr的大小,因为它是指向字符串文字hello的第一个字符的指针,因此编译器无法

c++ - 为什么可以将一个数组赋值给一个char指针?

通常当您声明一个指针(例如int)时,您必须为其分配一个内存地址:intvalue=123;int*p=&value;当您创建一个字符指针时,您可以为其分配一个字符数组而不需要包含地址:char*c="CharArray";这是如何运作的?它是否分配内存并指向它?为什么其他类型的指针不能做同样的事情? 最佳答案 Howdoesthiswork?字符串文字存储在可执行文件的只读数据部分(意味着它在编译期间初始化)并且c被初始化为指向该内存位置。隐式array-to-pointerconversion处理其余部分。请注意,将字符串文字转

c++ - 为什么采用 int 的函数重载优于采用 unsigned char 的函数重载?

考虑这个程序:#includeusingnamespacestd;voidf(unsignedcharc){cout这会打印出97,表明选择的f()重载是采用int的重载。我觉得这很奇怪;直觉上unsignedchar不是更适合char吗? 最佳答案 wouldn'tintuitivelyanunsignedcharbeabettermatchforachar?嗯,我想,但不是根据标准。根据[conv.prom]p1:Aprvalueofanintegertypeotherthanbool,char16_­t,char32_­t,o

c++ 何时返回 const char* 而不是 std :string

在下面的类中,speak()返回constchar*而不是std::string有什么好处或原因吗?classAnimal{protected:std::stringm_name;Animal(std::stringname):m_name(name){}public:std::stringgetName(){returnm_name;}constchar*speak(){return"???";}}; 最佳答案 std::string带有许多可能不需要和未使用的功能。如果您不想要所有这些功能,您应该考虑使用成本。传递std::st

c++ - char数组前面的加号是什么意思?

这个问题在这里已经有了答案:Whatisthepurposeofunaryplusoperatoronchararray?(2个答案)关闭4年前。我正在阅读thisanswer今天注意到字符数组前面有一个加号,但不知道它是什么意思。鉴于我删除它时出现的编译错误,我可以猜测它可以帮助编译器推断返回类型,但我不知道它是如何工作的。测试代码(也是here):#includeusingnamespacestd;auto&operator当删除plus符号(sample)时,它不会编译:main.cpp:Infunction'auto&operatormain.cpp:6:48:error:us

c++ - std::ostream 第一次使用时未正确格式化 const char*

我一直在编写自定义std::streambuf作为日志系统的一部分。但是,我遇到了流输出的第一段格式不正确的问题。这是一个不使用任何自定义streambuf或ostream类的简化测试用例:#includeintmain(){std::streambuf*coutbuf=std::cout.rdbuf();std::ostream(coutbuf)使用g++编译:$g++--versiong++(Ubuntu4.4.1-4ubuntu8)4.4.1$g++-ofailreduced-case.cpp$./fail0x400c80:writingtocoutusingaseparateo

c++ - 将 utf8 (char*) 转换为 wchar_t 的一个文件库?

我正在使用libjson这太棒了。我遇到的唯一问题是我需要将utf8字符串(char*)转换为宽字符字符串(wchar_t*)。我用谷歌搜索并尝试了3个不同的库,但它们都失败了(由于缺少header)。我不需要任何花哨的东西。只是一种单向转换。我该怎么做? 最佳答案 如果您使用的是Windows(考虑到您需要wchar_t,您很可能是Windows),请使用MultiByteToWideChar函数(在windows.h中声明),如下所示:intlength=MultiByteToWideChar(CP_UTF8,0,src,src

c++ - 用 int main(void) 编译失败; main(int argc, char *argv[]) 成功。为什么?

问题为什么编译具有intmain(void)main函数的程序与编译具有intmain(intargc,char*argv[])主函数,如果程序不使用命令行传递的参数?这个操作系统或编译器是特定的吗?我没有使用mingw和g++得到相同的结果(这很奇怪不是因为wingw是gcc的一个端口)。例子代码#include#include"SDL/SDL.h"intmain(void){return0;}编译命令g++test.cpp;#g++4.4.5i586-mingw32msvc-g++test.cpp;#mingw4.4.4错误(由第二个命令给出。)a(main.o):(.text+0

C++:将 const char* 类型的字符串文字传递给字符串参数

我是C++的新手,不明白为什么这段代码运行良好:stringGetString(stringpromt){cout像“bla”这样的字符串文字是constchar*类型。至少autoi="bla";表示i的类型为“constchar*”。为什么可以将它传递给GetString-Function,因为该函数需要一个字符串而不是constchar*? 最佳答案 std::string有一个convertingconstructor它采用charconst*并使用指针指向的空终止字符串初始化字符串。此构造函数不是显式,因此可用于隐式转换。

c++ - 将结构转换为 char* 并返回

我正在尝试将我的结构转换为char*,然后再转换回结构。但我想我错过了一些东西。一旦返回到结构体,结构体只有一个属性是正确的。其余的都是错误的。这是我的代码。#includeusingnamespacestd;structINFO{unsignedchara;intb;intc;charg[121];}inf;intmain(){charframe[128];INFOtest1=INFO();test1.a='y';test1.b=4000;test1.c=9000;strcpy(test1.g,"GoodbyeWorld");sprintf(frame,(char*)&test1);