Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中创建一个字符串数组失败,为什么?_C_Arrays_String - Fatal编程技术网

在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; } #包括 #包括 #包

我尝试在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;
}
#包括
#包括
#包括
#包括
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个字符指针,即100
char*foo类型。

扩展其他人的答案:

char *foo;
是指向字符的指针。可以为其分配单个字符的地址,也可以为其分配以“\0”结尾的字符序列中第一个字符的地址。也可以通过malloc()为其分配地址

是100个字符的空格,或最多99个字符的字符串和终止字符“\0”的空格

char *foo[100];

是100个字符指针,即100
char*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.