gpt4 book ai didi

c - 操作指针和函数

转载 作者:太空宇宙 更新时间:2023-11-04 06:27:18 24 4
gpt4 key购买 nike

尽管我已经学习 C 语言 4 个月了,但我在操作指针 方面遇到了困难,尤其是当必须将它们作为函数参数 传递时。我有以下小代码:

int getData(){

int i = -1 , people ;
char **clientNames ;
printf("Enter the number of people you want to save: ");
scanf("%d" , &people ) ;
clientNames = malloc( people * sizeof(char *) ) ;
do{
i++ ;
char temp[60] ;
printf("Enter Full Name: ");
scanf("%s" , temp ) ;
clientNames[i] = malloc( sizeof(temp) ) ;
strcpy( clientNames[i] , temp ) ;
printf("Saved as: %s\n", clientNames[i] );

}while ( i != people - 1) ;

clientNames[i+1] = malloc( sizeof("\0") ) ;
clientNames[i+1] = "\0" ;

return clientNames ;
}

int main(){
int i = 0 ;
char **C;
C = getData() ;
printf("Stoped saving.\n");
for (i=0 ; strcmp(C[i] , "\0") ; i++ ){
printf("%s\n", C[i] );
}
return 1 ;
}

所以我有2个问题:

1) 编译上述代码时 (gcc) 我收到警告:warning: assignment makes pointer from integer without a cast [默认启用]。要使此警告消失,可以做些什么?我尝试更改 getData() 的返回类型,但仍然出现相同的警告。

2) 如何修改此代码,以便将在 main() 中创建的 char C 作为 getData() 中的参数**传递?然后 getData 应该能够更改其内容并返回 **C。

毕竟这是指针的值,对吧? :)

最佳答案

我会告诉您应该更改哪些行才能计算出您的代码,但您几乎需要更改所有内容,因此请阅读下面的代码并尝试跟进差异:

char** getData()
{
int i, people;
char** clientNames;
char temp[60];

printf("Enter the number of people you want to save: ");
scanf("%d", &people);
clientNames = malloc((people+1)*sizeof(char*));

for (int i=0; i<people; i++)
{
printf("Enter Full Name: ");
scanf("%s", temp);
clientNames[i] = malloc(strlen(temp)+1);
strcpy(clientNames[i], temp);
printf("Saved as: %s\n", clientNames[i]);
}

clientNames[people] = NULL;
return clientNames;
}

int main()
{
int i;
char** C = getData();
printf("Stoped saving.\n");
for (i=0; C[i]!=NULL; i++)
{
printf("%s\n", C[i]);
free(C[i]);
}
free(C);
return 0;
}

我省略了 malloc 之后和 free 之前所需的断言,但您通常也需要它们...

关于c - 操作指针和函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25230420/

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