草庐IT

c# - 为什么 C# 和 VB.NET 隐式编码 char* 不同?

所以我有一个用C++编写的函数,看起来像这样...extern"C"__declspec(dllexport)int__stdcallSomeFunction(char*theData){//stuff}...我正在我当前的项目中使用它(用C#编写)。还有其他项目使用这个函数用VB写的,看起来像这样:PublicDeclareFunctionSomeFunctionLib"MyDLL.dll"_Alias"_SomeFunction@4"(ByValtheDataAsString)AsInteger所以我尝试在C#中编写一个等效项,但发现使用字符串类型实际上对我不起作用-字符串会返回与

c++ - 使用字符串文字初始化 vector<char>

以下代码的正确行为是什么?#include#includeintmain(){std::vectorv={"y","z"};std::cout这被Clang接受了但不是GCC和VC++这不是未定义的行为吗? 最佳答案 在深入研究标准之后,我发现了以下内容:在这里,我正在尝试初始化vector使用两个字符串文字,而不是两个字符。使用vector(initializer_list).在这种情况下,vector(initializer_list).但是字符串文字的类型是“nconstchar数组”,因此初始化列表构造函数不匹配。这不会导致

C++ cin char 逐个符号读取

我需要逐个符号地阅读。但是直到输入结束我才知道如何阅读。例如测试系统将cin>>somecharvariablem次。我必须逐个符号地阅读所有字符。只有m次。我该怎么做? 最佳答案 有几种方法可以一次读一个字,直到你读完所有的字,但不一定是最好的。就我个人而言,我会使用以下代码:charc;while(cin.get(c)){//Processchere.}如果您只需要读取m个字符,请考虑使用for循环:charc;for(unsignedinti=0;i只要满足两个条件,就会运行循环:(1)读取的字符少于m,以及(2)仍有字符要读

c++ - char* 和 int* 的区别

char*和int*有什么区别?当然,它们是不同的类型,但是我怎么写char*s1="helloworld";作为"helloworld"它不是一个字符,它是一个字符数组,我不会写*s1作为char*s1={'h','e','l','l','o','','w','o','r','l','d'};和int*a={2,3,1,45,6};有什么区别? 最佳答案 这很简单:一个字符串文字,即"foobar"被编译成一个字符数组,存储在程序的静态部分(即,所有常量存储的地方)和空终止。然后,将this分配给变量只是将指向该内存的指针分配给变

c++ - 将 char 指针传递给接受对 char 数组的引用的函数

我正在尝试调用这个方法#defineSIZE16voidDoSomething(char(&value)[SIZE]){}从这个方法:voidBeforeDoingSomething(char*value,intlen){if(len==SIZE){DoSomething(value);}}尝试这样做会给我这个错误:areferenceoftype"char(&)[16]"(notconst-qualified)cannotbeinitializedwithavalueoftype"char*"关于如何让编译器接受函数BeforeDoingSomething中传递的value的任何提示

c++ - 使用 g++ 使用 NULL const char* 避免不正确的 std::string 初始化

是否有任何g++选项可以检测到带有NULLconstchar*的std::string的不正确初始化?我正在将一些int字段转换为std::string字段,即:structFoo{intid;Foo():id(0){}};...变成了:structFoo{std::stringid;Foo():id(0){}//oooops!};我完全忽略了使用0进行的错误“id”初始化,而g++根本没有给我任何警告。这个错误是在运行时检测到的(std::string构造函数抛出异常),但我真的很想在编译时检测到这些东西。有什么办法吗? 最佳答案

c++ - 将 int 地址转换为 char 指针的正确方法

如果我需要从ifstream读取intintmyInt=0;fileStream.read(reinterpret_cast(&myInt),sizeof(int));正在使用reinterpret_cast实现该目标的正确方法? 最佳答案 isusingreinterpret_castcorrectwaytoaccomplishthat?是的。更喜欢C++风格的转换,而不是C风格的转换。正如评论中所建议的,使用readmethodfunction的更好方法是:intmyInt=0;fileStream.read(reinterpr

C++11 类型推导与 const char *

在GotW94,HerbSutter对“经典C++”声明进行了区分constchar*s="Hello";和“现代”风格autos="Hello";他告诉我们“s的类型有细微差别,auto样式更正确”。[编辑添加:评论表明这可能不公平地表达Sutter的实际意思;请参阅下面的讨论。]但是……有什么区别?我的印象是constchar*是引用字符串文字的正确方法。此外,当我询问我的调试器(lldb)时,它似乎认为类型实际上是相同的:*thread#1:tid=0x1756c2,0x0000000100000f8ftest`main+31attest.cc:4,queue='com.appl

c++ - 使用 Arduino 将字符串转换为类型 const char*

我正在使用Arduino库。我想记录一些来自传感器的数据,为其添加日期时间戳并将其写入SD卡。建立文本文件名我试过StringdataFileName=String(String(sedClock.getTime().year(),DEC)+String(sedClock.getTime().month(),DEC)+String(sedClock.getTime().day(),DEC)+String(sedClock.getTime().hour(),DEC)+String(sedClock.getTime().minute(),DEC)+String(sedClock.getTi

c++ - 添加两个 unsigned char 变量,结果为 int

有代码:#includeintmain(){unsignedchara=4,b=255;intg=(unsignedchar)a+(unsignedchar)b;std::cout结果:259为什么结果是259,而不是3?如果加了两个unsignedchar变量,应该会溢出,result应该是3,然后把unsignedchar3转成int3。 最佳答案 加法运算会先promote其操作数为int,然后再进行加法运算。这就是C的工作原理。如果要截断,则需要将其分配回更窄的类型,例如unsignedchar。