C++ 将字符串数组指向空中

C++ 将字符串数组指向空中,c++,c,struct,void-pointers,double-pointer,C++,C,Struct,Void Pointers,Double Pointer,我在空白处传递指针时有点小问题。此空白仅显示结构数组的起始位置。当循环转到第二个位置时,我得到了“分段错误”。我试图用相同的循环显示主循环中的数组,它工作了。有什么问题吗 typedef struct starr{ char string[100]; int occ; } starr; int main(){ int n; starr *array_str; //insert n and array_str array_str=(starr *)

我在空白处传递指针时有点小问题。此空白仅显示结构数组的起始位置。当循环转到第二个位置时,我得到了“分段错误”。我试图用相同的循环显示主循环中的数组,它工作了。有什么问题吗

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);
    }
}
typedef结构starr{
字符串[100];
国际货币兑换中心;
}斯塔尔;
int main(){
int n;
starr*数组_str;
//插入n和数组
数组_str=(starr*)malloc(sizeof(starr)*n);
视图(&array_str,n);
}
空视图(斯塔尔*阵列,n){
int i;
对于(i=0;istring);
}
}
#包括
#包括
类型定义结构斯塔尔{
字符串[100];
国际货币兑换中心;
}斯塔尔;
空视图(starr*阵列,大小);
int main(){
尺寸;
//初始化
starr*数组_str;
数组_str=(starr*)calloc(n,sizeof(starr));
//用array_str做一些事情
视图(数组_str,n);
自由(array_str);//走!自由!
}
空视图(星形*阵列,大小){
尺寸i;
对于(i=0;i
1:
视图
接受一个
starr*
,并且
数组_str
已经是该类型,因此不需要使用
引用它

2:由于
array\u str
是一个
starr*
,因此它的索引(例如
array\u str[i]
)是一个
starr
,因此使用
符号而不是
->
符号

3:
calloc
将在声明内存时清除字节,以便将它们初始化为
NULL
字节,并且如果出于任何原因没有首先为它们提供正确的值,则可以避免打印可能导致缓冲区溢出的字符串

4:
n
的类型应为
size\u t
,以符合其含义,即数组中的索引数


5:别忘了
释放(array_str)因为您使用
malloc
/
calloc

视图(array_str,n)初始化了它因为它已经是一个
starr*
,不过我还应该指出,除非你使用
calloc
而不是
malloc
,否则你将打印垃圾字节。这与
C++
有关吗?如果这真的是
C
,你需要发布你包含的头文件。如果没有包含“代码> MalOC >的头文件,则您所发布的代码将有不同的行为。如果是C++,请使用<代码> STD::String 和容器类(并且不需要<代码> TyPulfF),否则不要标记C++(C=C++)。谢谢支持。我修正了删除“&”的错误。当然,这只是代码的一部分。这只是问题的一个例子,因为我现在没有互联网发布所有完整的代码。我用手机写了这一切。再次感谢你
#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);
    }
}