首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >指针数组的动态内存分配

指针数组的动态内存分配
EN

Stack Overflow用户
提问于 2013-09-28 23:40:12
回答 2查看 57.5K关注 0票数 22

我正在尝试编写一个程序,它从文本文件中读取一系列字符串,并将这些字符串存储在字符串数组中,为每个元素动态分配内存。我的计划是使用指针将每个字符串存储在数组中,然后随着读取的数组增加数组的大小。我很难理解为什么我下面的测试代码不能工作。这是一个可行的想法吗?

代码语言:javascript
复制
char *aPtr;
aPtr =(char*)malloc(sizeof(char));

aPtr[0]="This is a test";


printf("%s",aPtr[0]);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-28 23:45:08

在C中,字符串是一个char*T类型的动态数组表示为指向T的指针,因此对于char*,它将是char**,而不仅仅是您声明的char*

毫无疑问,编译器已经对此发出了一些警告。注意这些警告,它们通常能帮助你理解该做什么。

下面是开始测试的方法:

代码语言:javascript
复制
char **aPtr;
int len = 1; // Start with 1 string
aPtr = malloc(sizeof(char*) * len); // Do not cast malloc in C
aPtr[0] = "This is a test";
printf("%s",aPtr[0]); // This should work now.
票数 23
EN

Stack Overflow用户

发布于 2013-09-29 00:13:47

你这样做是完全错误的。代码的正确版本应该如下所示:

代码语言:javascript
复制
int main ()
{
char *aPtr;
aPtr =(char*)malloc(20*sizeof(char));
aPtr ="This is a test";
printf("%s",aPtr);
}

您可以使用指针数组。如果你想存储多个字符串。是的,我知道使用for循环会很容易。但我试图用一种即使是初学者也能理解的简单方式来解释。

代码语言:javascript
复制
int main ()
{
char *aPtr[10];
aPtr[0] =(char*)malloc(20*sizeof(char));
aPtr[0] ="This is a test";
aPtr[1] =(char*)malloc(20*sizeof(char));
aPtr[1] ="This is a test2";
printf("%s\n%s\n",aPtr[0],aPtr[1]);
 }
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19068643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档