【问题标题】:How do you find the length of columns in a 2D array using double pointers?如何使用双指针查找 2D 数组中列的长度?
【发布时间】:2019-11-06 07:58:38
【问题描述】:

您好,对于我的程序,我需要查找使用双字符指针存储的单词的长度,以创建一种二维数组。每当我尝试使用strlensizeof(arr)/sizeof(arr[0]) 时,它都会返回大量数字,而不是每列存储的字符数(字符串的大小)。我认为这可能与空指针有关,但我不确定如果是这种情况,我将如何解决这个问题。

这是我用来尝试确定字符串大小的两行代码。第一个也迫使我重新启动我的终端,因为 ctrl+c 甚至不会停止它。当我打印它时,第二个只是返回一个非常大的数字。

int wordlength = sizeof(*(list+listPos))/sizeof(*(*(list+listPos)));

int wordlength = strlen(*(list+listPos));

【问题讨论】:

  • 请尝试创建minimal reproducible example 向我们展示。 list 是什么?什么是listPosarr 是什么?请注意,如果你有指针,那么指针的大小就是指针本身的大小,而不是它所指向的大小。

标签: c pointers multidimensional-array


【解决方案1】:

这里有一个样本:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
  char **arr;
  arr=malloc(2*sizeof(char*));
  *arr=malloc(20*sizeof(char));
  strcpy(*arr,"Hello World");
  int len=strlen((*arr+0));
  printf("%s %d",*arr,len); //output Hello World 11
  return 0;
}

当你这样写时:

strlen(*(list+listPos));

您试图从字符串数组中获取值,但只是从字符串中获取地址而不是其值。

【讨论】:

  • *arr = ... 后跟 *arr = ... 正在使第一个任务没有实际意义。您可能想要strcpy 而不是第二个分配。
  • 另外,请不要对本质上是数组的内容使用指针算法。而不是*arr 使用arr[0]。而*arr+0 并没有做任何有用的事情。
  • 不幸的是,我已经习惯了,因为在我的大学里,当我们分配任务时,他们从代码中排除了 [],即使我们得到了 ****arr,我也只需要使用指针算术:')
  • 那是给你的学术... :) 使用类似“数组”的语法和[] 通常会使代码更易于阅读和理解,因此也更易于维护。
猜你喜欢
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多