gpt4 book ai didi

c++ - 将字符串数组指向 void 内

转载 作者:行者123 更新时间:2023-11-30 19:43:06 24 4
gpt4 key购买 nike

我在 void 内传递指针时遇到了一些问题。该 void 仅显示结构数组的第一个位置。当循环转到第二个位置时,我得到“段错误”。我尝试使用相同的循环显示主内部的数组,它有效。问题是什么?

typedef struct starr{
char string[100];
int occ;
} starr;

int main(){
int n;
starr *array_str;
//insert n and array_str
array_str=(starr *)malloc(sizeof(starr)*n);
view(&array_str,n);
}

void view(starr *array_str, n){
int i;
for(i=0;i<n;i++){
printf("String %s",array_str[i]->string);
}
}

最佳答案

#include <stdio.h>
#include <stdlib.h>

typedef struct starr {
char string[100];
int occ;
} starr;

void view(starr *array_str, size_t n);

int main() {
size_t n;
// initialize n
starr *array_str;
array_str = (starr *)calloc(n, sizeof(starr));
// do stuff with array_str
view(array_str, n);

free(array_str); // go! be free!
}

void view(starr *array_str, size_t n) {
size_t i;
for(i = 0; i < n; i++){
printf("String %s", array_str[i].string);
}
}

1:view 接受 starr *,并且 array_str 已经是该类型,因此无需使用 引用它&.

2:由于 array_strstarr *,因此它的索引(例如 array_str[i])是 starr 因此请使用 . 表示法而不是 -> 表示法。

3:calloc将在声明内存时清除字节,以便将它们初始化为NULL字节,并且您将避免打印可能导致缓冲区溢出的字符串,如果您出于某种原因没有首先给他们正确的值(value)观。

4:n 类型应为 size_t 与其含义一致,即数组中的索引数。

5:不要忘记 free(array_str); 因为您使用 malloc/calloc 初始化了它。

关于c++ - 将字符串数组指向 void 内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30035195/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com