问题标签 [char-pointer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
130 浏览

c - C Guarantees Re:指向无效和字符类型的指针,类型转换

我对 C 规范(主要是 C99)的最大努力使我认为void *在以下任何类型之间进行强制转换(或隐式转换,其中隐式转换行为适用)是有效的:

void *, char *, signed char *,unsigned char *

我希望这不会触发未定义的行为,并且保证这些指针具有相同的底层表示。

因此,应该可以采用这四种类型中的任何一种类型的指针,该指针已经指向可以合法取消引用的地址,类型转换和/或将其分配给三个 char 类型指针之一,并取消引用它以访问相同的内存,唯一的区别是您的代码是否将该位置的数据视为charsigned charunsigned char.

它是否正确?void *是否存在任何不正确的 C 标准版本(预标准化 C 中缺少类型)?

PS我相信这个问题是在许多其他问题中零碎回答的,但我从未见过一个明确的答案,明确说明/确认。

0 投票
1 回答
108 浏览

c - 使用 free() 后字符串变成垃圾

我用 typedef person_t 在一个人结构中创建一个人:

以上工作正常。

使用此功能时会出现问题:

这里的 str 类似于:“Name Nameson\t22”。那是由制表符分隔的名称。然后我将两者分开并将字符放入 char* 名称中。

person_t 是结构的 typedef。

如果我从 person_set_name 中删除 free(person->name),一切正常。但是如果我把它留在里面,名字就会变成垃圾,例如:“É8>”。

我假设在我复制每个字符的 for 循环中发生了错误。但是以我有限的 CI 经验看不出是什么。帮助表示赞赏。

0 投票
1 回答
93 浏览

c++ - 打印字符指针数组

我正在尝试使用指针数组从文件中读取两行。但是,我没有在屏幕上看到任何东西。我已经尝试在网上搜索,但无法解决问题。这是我在 mac 上使用 Netbeans 编写的代码。

0 投票
2 回答
83 浏览

c - Difference between char, char* inside Linked Lists

I created a linked list that hold int and char type data. A function adds the data to the list and the other prints it out. When i only print the int type i get no problems but when i try to also print the char type the program crashes.

So it has to do the way i'm defining the char* in the printing function print_list().

To be more specific my problem is here in print_list() :

So my actual code is (getting 0 errors and 0 warnings but the program crashes):

0 投票
1 回答
1504 浏览

c++ - 如何将 char* 传递给 GetModuleHandle 函数?

我只是想根据一个字符串来获取模块信息,这个字符串很可能是“somefile.exe”之类的东西。

GetModuleHandle 中出现“char *”类型的错误参数与“LPCWSTR”类型的参数不兼容。

现在,我尝试了许多步骤,例如:

  1. 转到项目属性→配置属性→字符集并将其设置为使用多字节字符集而不是 Unicode。我已经看到它帮助了其他人,但它并没有对我有用。

  2. (LPCWSTR)szModule. 这使得程序构建成功,但它没有按预期工作。

  3. 通过将参数替换为 static 来使用 unicode L"somefile.exe"。然而,这非常有效,不用说它不是很实用。

我的问题是:如果是类型,我该如何GetModuleHandle(szModule)编译?szModulechar*

如果有任何帮助,我正在使用 Visual Studio 2015。

0 投票
1 回答
1895 浏览

c - 如何将空终止符附加到索引字符指针的末尾

我运行了以下代码,它在 while 循环永远运行时崩溃了。当我调试这段代码时,我发现了问题*(pointer+cnt)='\0';空字符永远不存在。我不知道如何在此处附加空终止符,以免程序崩溃。

0 投票
6 回答
2489 浏览

c++ - C++ tolower/toupper 字符指针

你们知道为什么下面的代码在运行时会崩溃吗?

我正在尝试将 char* (字符串)小写。我正在使用视觉工作室。

谢谢

0 投票
1 回答
496 浏览

c - 将从 C# 接收的文件字节 [] 数组写入 C dll 中的文件

我刚刚创建了一个简单的 PDF 文档,其中包含一个单词“Test”,并在 C# 控制台应用程序中创建了一个字节流:

buff = File.ReadAllBytes(<Path of File>);

该文件的大小约为 9,651 字节。我还创建了一个 Win32 C dll,它导出一个函数,该函数将文件字节数组和字节数组的长度作为参数,在 C# 中使用以下语句声明:

[DllImport("<path to dll>", CallingConvention = CallingConvention.Cdecl)] public static extern int file_data(byte[] byteArray, int length);

C dll中的方法导出如下:

#define FILEDATA_API __declspec(dllexport) FILEDATA_API int file_data(char *byteArray, int size);

然后我调用了ret = file_data(buff, buff.length);并在 C 代码中,将直接接收到的字符指针逐个字符写入临时文件,如下所示:

但是这里出现了问题,将字节数组逐个字符转储到文件中的 C 代码会生成一个大小为 9,755 字节的文件。它里面的大部分内容看起来都是正确的,除了一些被引入的新行(据我所知,可能是一些额外的数据),这会导致 PDF 文件损坏并且这个转储的版本无法在 Adob​​e 中打开. 有人可以提供一些关于我可能出错的地方吗?我不能使用%s in fprint,因为 PDF 中字节数组的某些组合会导致 C 中以空字符结尾的字符串,然后转储出比我预期的更少的数据。

谢谢。

更新:

  1. 所需的行为是从 C# 接收的文件字节数组以及使用 C 代码写入文件时应该使文件在 Adob​​e 中成功打开。
  2. 问题中存在的代码应该足以让某人生成一个 win32 dll,它只是写出指向文件的 char 指针,但我添加了更多细节。
0 投票
0 回答
413 浏览

c++ - 模板函数 C++ Sqlite3 包装器

在为数据库创建C++包装器的过程中。Sqlite3下面是两个(一起工作)std::vector用查询结果填充的函数;在我尝试对它们进行模板化之前,这两者都是成功的。char*[]对于声明char**中的参数,我收到编译错误(VS 中的 C2664)Sqlite3

我不太了解,C但从我收集的内容中,作为函数参数传递的数组被重写为指针,在转换后制作char*[]char**等效,尽管结果是右值。但是,这将要求vector是一个 const 引用,从而违背了用结果填充它的目标。

如何更改它以通过成功的查询正确编译?任何其他建议或更正将不胜感激。提前致谢。

编辑:

更改char *argv[], char *names[]char **argv, char **names没有效果。抛出相同的错误:“无法将参数 3 从转换int (__cdecl *)(void *,int,char **,char **)int (__cdecl *)(void *,int,char **,char **)”。

0 投票
1 回答
70 浏览

c - 尝试将 char 指针附加到固定字符串时出现内存异常

我有一个要求,我必须获取一个 int 的 RFID RSSI 值并将其转换为 char 指针并附加到它。下面是我是如何做到的。

但是我在运行代码时遇到了以下异常。

我在这里做错了什么?当我在在线 C 编译器上运行它时,它运行良好。该异常在该行抛出,