“指向”存储在内存中的另一个值的数据类型。指针变量包含某个其他实体(变量或函数或其他实体)的内存地址。此标记应用于涉及指针使用的问题,而不是引用。使用指针的最常见编程语言是C,C ++,Go和汇编语言。使用特定语言标记。其他有用的标签是描述指针使用的方法,函数,结构等。
假设我有一个具有非负值的整数变量和两个指向它的指针——一个有符号指针和一个无符号指针。据我从标准中可以看出,这很好。 6.5 一个物体应该...
我目前正在做一个项目,对指针和结构对象不熟悉。一切顺利,但我遇到了障碍,即分段错误(核心转储)错误。这是鳕鱼...
我正在使用 C 实现一个链表,它在头部、尾部(最后一个节点)和第 k 个索引处具有插入功能。然而,当我尝试实现插入功能时,并尝试
int 主要() { char artist1[4][80] = {}; char artist2[4][80] = {}; char (*pb1)[4][80] = artist1; char (*pb2)[4][80] = 艺术家 2; char *arrptr[2] = {pb1, pb2}; } 我在努力
我想使用 strcat 将存储在结构中的每个新标签与 char tags_cell_concat 中的 char 成员连接起来,如下所示: #包括 #包括 #包括 我想使用 strcat 将存储在结构中的每个新标签与 char tags_cell_concat 中的 char 成员连接起来,如下所示: #include <stdio.h> #include <string.h> #include <stdlib.h> #define BUFDATE 50 #define BIGBUFFLEN 1024 typedef struct { char date[BUFDATE]; char tags[BUFDATE]; char task[BUFDATE]; char next_step[BUFDATE]; } Record; int main() { Record *records = (Record *) malloc(2*sizeof(Record)); // all tags: "Hello world I am a string slice function" strcpy(records[0].tags, "Hello world"); strcpy(records[1].tags, "string slice"); strcpy(records[2].tags, "function"); char tags_cell_concat[BIGBUFFLEN] = {0}; char *chunk; char *pointer; for (size_t i=0; i<3; i++){ strcat(tags_cell_concat, " "); pointer = records[i].date; while ((chunk = strsep(&pointer, " ")) !=NULL) { printf("%s\n", chunk); } if (strstr(tags_cell_concat, chunk) != NULL) { strcat(tags_cell_concat, chunk); } } return 0; } 我在运行时遇到分段错误 编辑 在下面的评论和回答之后,上面的代码(我没有更改)确实存在第一个问题,因为没有为records分配足够的空间。我更改了代码以分配足够的内存,但问题仍然存在。如果第 36-39 行被注释掉,段错误问题就会消失,这向我表明问题可能出在使用 strcat() 函数时: #include <stdio.h> #include <string.h> #include <stdlib.h> #define BUFDATE 50 #define BIGBUFFLEN 1024 typedef struct { char tags[BUFDATE]; } Record; int main() { size_t size = 6; Record *records = (Record *) malloc(size*sizeof(Record)); strcpy(records[0].tags, "tag1 tag2"); strcpy(records[1].tags, "tag3"); strcpy(records[2].tags, "tag4 tag2"); strcpy(records[3].tags, "tag1 tag5"); strcpy(records[4].tags, "tag6 tag3"); strcpy(records[5].tags, "tag7 tag2"); strcpy(records[6].tags, "tag8 tag5"); char tags_cell_concat[BIGBUFFLEN] = {0}; char *chunk; char *pointer; for (size_t i=0; i<size; i++){ strcat(tags_cell_concat, " "); pointer = records[i].tags; while ((chunk = strsep(&pointer, " ")) !=NULL) { printf("%s\n", chunk); } if (strstr(tags_cell_concat, chunk) != NULL) // line to comment out and get no seg fault { // line to comment out and get no seg fault strcat(tags_cell_concat, chunk); // line to comment out and get no seg fault } // line to comment out and get no seg fault } return 0; } 这是现在的输出: tag1 tag2 make: *** [runc] Segmentation fault: 11 编辑2 我再次更改了代码,因为我删除了记录中的一个记录,以便它对应于分配的内存。此外,我在 if 语句中检查 chunk 是否不是 NULL(使用 (chunk !=NULL) 是否正确?)。但问题仍然存在。这是代码的最新版本: #include <stdio.h> #include <string.h> #include <stdlib.h> #define BUFDATE 50 #define BIGBUFFLEN 1024 typedef struct { char tags[BUFDATE]; } Record; int main() { size_t size = 6; Record *records = (Record *) malloc(size*sizeof(Record)); strcpy(records[0].tags, "tag1 tag2"); strcpy(records[1].tags, "tag3"); strcpy(records[2].tags, "tag4 tag2"); strcpy(records[3].tags, "tag1 tag5"); strcpy(records[4].tags, "tag6 tag3"); strcpy(records[5].tags, "tag7 tag2"); char tags_cell_concat[BIGBUFFLEN] = {0}; char *chunk; char *pointer; for (size_t i=0; i<size; i++){ strcat(tags_cell_concat, " "); pointer = records[i].tags; while ((chunk = strsep(&pointer, " ")) !=NULL) { printf("%s\n", chunk); } if ((strstr(tags_cell_concat, chunk) != NULL) && (chunk !=NULL)) // line to comment out and get no seg fault { // line to comment out and get no seg fault strcat(tags_cell_concat, chunk); // line to comment out and get no seg fault } // line to comment out and get no seg fault } return 0; } 您仅将内存分配给类型为 Record. 的两个元素的数组 Record *records = (Record *) malloc(2*sizeof(Record)); 所以访问数组元素的有效索引范围是[0, 1]。 但是您使用无效索引2访问数组的元素 // all tags: "Hello world I am a string slice function" strcpy(records[0].tags, "Hello world"); strcpy(records[1].tags, "string slice"); strcpy(records[2].tags, "function"); 导致未定义的行为。 以及这个 for 循环中的条件 for (size_t i=0; i<3; i++){ 也是无效的。 错误的原因之一是您使用了像2和3这样的幻数。而是使用命名常量。 也不是数组元素的所有数据成员都被初始化。所以这些陈述 pointer = records[i].date; while ((chunk = strsep(&pointer, " ")) !=NULL) { printf("%s\n", chunk); } if (strstr(tags_cell_concat, chunk) != NULL) { strcat(tags_cell_concat, chunk); } 还调用未定义的行为。
我正在寻找一种方法来创建一个数组指针,我将在其中根据完成的读取量分配内存 我有以下代码: 结构 enable_expire { 时间; 诠释
我尝试在删除元素后减少数组的长度 我有尝试数组: int* arr = new int[5]; 对于 (int i = 0; i < 5; i++) { arr[i] = i; } and the function: void del1(int* arr...
Function fopen(filename, "r") 在我的 Ubuntu 上不起作用 [关闭]
我正在运行一个简单的程序来打开文件。有关操作系统和处理器的一些详细信息: .Ubuntu 64位 .处理器 AMD Ryzen 7 每次我尝试执行时总是收到此错误:没有这样的...
共享指针(例如 boost::shared_ptr 或新的 std::shared_ptr)和垃圾回收方法(例如用 Java 或 C# 实现的方法)之间有什么区别?我的理解方式...
我正在尝试使用指针来操作一些二维数组,我知道指针的基础知识但是我在使用这段代码时遇到了困难: { char a[3][10] = { "Malek", "Zied"...
移动文件指针以读取一行中找到的特定字符串后的字符,并使用 Python 跳过接下来的两个字符和空格
我正在尝试通过使用 Python 跳过两个字符来读取特定字符串后的字符。 示例 1: 41 Rx d b F0 12 13 - 这里我想从 F0 读取行 例 2:1 255 Rx d 3 31 22 25 ...
在这种情况下,我想在一个向量中存储多个对象(例如 ClassX 类型)。 引用包装向量和指针向量有什么区别? std::向量<...
下面就是归并排序的实现。但是,我什至不明白这段代码是如何工作的。我们不使用指针,并且在 main() 中不返回任何内容。那么,它是如何操作myarray的呢?可以
这是我添加二维数组的代码: #包括 void getArray(int array[][], int n, int m) { 对于 (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { printf("
我正在尝试重载我在 CPP 中创建的类的 + 运算符,但是每当我返回重载函数中定义的新类对象时,它都会给我错误: a.out(48371,0x10374a600)
需要我实现以下功能: void calc ( double* a, double* b, int r, int c, double (*f) (double) ) 参数 a、r、c 和 f 是输入,b 是输出。 “a”和“b”是两个-
int [2][3]; 整数 b[2][3]; 诠释 d[5][3]; int **q[3] = {a, b, d}; 为什么下面这段代码显示错误? 错误:a.cpp:在函数“int main()”中: a.cpp:12:19: 错误:无法转换 ‘int ...
在我工作的项目中,有一个名为schedule的类实现了一个名为ValidateShiftForDay的函数: bool Schedule::ValidateShiftForDay(Entities::Employee &employee, 实体...
我在尝试使用 strstr() 查找字符串的子字符串时遇到问题。出于某种原因,当我使用 I eat appls 作为 haystack 字符串,将 apples 作为 needle 子字符串时,它
所以,我很确定我从根本上误解了指针/引用,但我想确认一下……在我的 C++ 程序中,我试图维护指向其他对象的指针向量……想法 b。 ..