问问题
17370 次
5 回答
2
您需要定义数组大小来告诉编译器要分配多少空间:
char U1[256];
如果您在编译时不知道数组的大小,可以使用以下方法动态分配内存malloc
:
// #include <stdlib.h>
int *arr;
int n, i;
printf("Number of elements: ");
scanf("%d", &n);
// Allocate n ints
arr = malloc(n * sizeof(int));
printf("Enter %d elements: ", n);
for(i = 0; i < n; i++)
scanf("%d", &arr[i]);
printf("Here they are: ");
for(i = 0; i < n; i++)
printf("%d ", arr[i]);
// Free the array on the end!
free(arr);
笔记
printf("The %s has %i bytes.", U1, sizeof(U1));
将始终打印 256,因为sizeof
返回的是在编译时扣除的数组大小,而不是刚刚读入数组的字符数。您可以sizeof(char) * (strlen(U1) + 1)
用来计算字符串所需的字节数(+1 来自字符串末尾的 NUL 终止符)。
于 2013-09-17T12:39:17.200 回答
2
C 数组是固定长度的,因此每个数组在声明时都需要完全指定其大小。有效的声明类似于:
char U1[256];
请注意,如果用户输入的字符数超过该数量(为终止零减去一),则该程序的行为是未定义的。为避免此问题,请替换scanf("%s")
为fgets()
并了解动态数组。
于 2013-09-17T12:39:18.037 回答
1
C 中的数组需要用大小声明。另一种选择是使用作为指针的动态数组
于 2013-09-17T13:13:28.107 回答
0
你需要给你的数组一个大小。Scanf 接受一个已经分配的数组并且它不会调整它的大小,它只是用输入填充它。
您的代码应如下所示:
#include <stdio.h>
int main()
{
char U1[256];
puts("Enter a string:");
scanf("%s", U1);
printf("The %s has %i bytes.", U1, strlen(U1));
return 0;
}
请注意,我没有使用sizeof
,因为我将拥有数组的整个大小,而不仅仅是字符串。strlen
会给你一个 C 空终止字符串的大小。
于 2013-09-17T12:46:22.173 回答
0
你应该制作一定的数组,正常的C编译不支持动态数组。
于 2013-09-17T12:47:20.703 回答