在C中创建一个字符串数组失败,为什么?
我尝试在C中创建一个字符串数组。下面是代码:在C中创建一个字符串数组失败,为什么?,c,arrays,string,C,Arrays,String,我尝试在C中创建一个字符串数组。下面是代码: #include <stdio.h> #include <string.h> #include <ctype.h> #include <stdlib.h> int main() { char *foo[100]; strcpy(foo[0], "Testing this"); printf("%s ", foo[0]); return 1; } #包括 #包括 #包
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
int main()
{
char *foo[100];
strcpy(foo[0], "Testing this");
printf("%s ", foo[0]);
return 1;
}
#包括
#包括
#包括
#包括
int main()
{
char*foo[100];
strcpy(foo[0],“测试这个”);
printf(“%s”,foo[0]);
返回1;
}
但是当我编译它的时候,它就崩溃了。没有错误,什么都没有,它只是不工作和中断。有什么建议吗?当我使用tri char*foo[10]时,它可以工作,但我不能仅使用10个字符串您分配了一个指针数组,但没有为它们分配任何内存。您需要调用
malloc
从堆中分配内存
char *foo[100];
foo[0] = malloc(13);
strcpy(foo[0], "Testing this");
当然,您需要在以后的某个日期,当您使用完内存后,释放它
您的代码将调用所谓的。基本上,任何事情都可能发生,包括按预期工作的代码。如果带有char*foo[10]
的版本按照您的预期工作,那完全是运气使然
另外,您的main()
定义是错误的。它应该是intmain(void)
您分配了一个指针数组,但没有为指针分配任何内存。您需要调用malloc
从堆中分配内存
char *foo[100];
foo[0] = malloc(13);
strcpy(foo[0], "Testing this");
当然,您需要在以后的某个日期,当您使用完内存后,释放它
您的代码将调用所谓的。基本上,任何事情都可能发生,包括按预期工作的代码。如果带有char*foo[10]
的版本按照您的预期工作,那完全是运气使然
另外,您的main()
定义是错误的。它应该是intmain(void)
您正在分配一个未分配的指针。char*foo[100]是一个由100个未分配指针组成的数组,它们指向内存中的未知位置,这些位置您可能无法访问。您正在分配一个未分配指针。char*foo[100]是一个由100个未分配指针组成的数组,它们指向内存中的未知位置,这些位置您可能无法访问。扩展其他人的答案:
char *foo;
是指向字符的指针。可以为其分配单个字符的地址,也可以为其分配以“\0”结尾的字符序列中第一个字符的地址。也可以通过malloc()为其分配地址
是100个字符的空格,或最多99个字符的字符串和终止字符“\0”的空格
char *foo[100];
是100个字符指针,即100char*foo代码>类型。扩展其他人的答案:
char *foo;
是指向字符的指针。可以为其分配单个字符的地址,也可以为其分配以“\0”结尾的字符序列中第一个字符的地址。也可以通过malloc()为其分配地址
是100个字符的空格,或最多99个字符的字符串和终止字符“\0”的空格
char *foo[100];
是100个字符指针,即100char*foo代码>类型。您正在创建指向无位置点的100个指针。正如David所解释的,您需要动态分配内存。但是,如果您知道字符串的大小(或最大值),也可以让编译器为您执行此操作:
您正在创建一个100个指向点no where的指针。正如David所解释的,您需要动态分配内存。但是,如果您知道字符串的大小(或最大值),也可以让编译器为您执行此操作:
还有一件事,你知道为什么它也失败了吗?还有一件事,你知道为什么它也失败了吗?
MISTAKE: not allocating enough memory for the string.
CORRECTION: using malloc to allocate 13 blocks of memory for the string.