-3
4

5 回答 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 回答