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);
}
}