Char数组未在C中初始化为空

时间:2015-06-18 21:20:35

标签: c arrays char

我有一个char数组来收集名称,但是这些位置没有被初始化为空。 如果输入任何值,则其余位置将为空,但如果未输入任何值,则某些位置将填充一些"奇怪的"字符。 我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

取决于您如何初始化阵列。对于静态分配的数组(函数外部未动态分配的数组):

char arr[20] = {0};

void function( void ) {
    // stuff happens here to the array
}

对于自动数组(函数范围内未动态分配的数组):

void function( void ) {
   char arr[20] = {0};
   // stuff happens to the array and it cannot 
   // be accessed from the outside the function
}

对于动态数组,使用calloc()动态分配并初始化为0:

size_t len = 20;
char *arr = calloc ( len , sizeof(char));

您还可以使用memset()清除数组:

char arr[20];
memset (arr, 0 , sizeof(arr));

答案 1 :(得分:0)

清除阵列。

int i, size=20;
char c[size];

for(i=0; i<size; i++){
    c[i] = '\0'; // or  c[i] = 0; should work as well.
}

答案 2 :(得分:-2)

在C中声明一个数组会分配给定大小的内存块,并返回指向第一个元素的指针。因此,存储器单元中存在的任何东西都是“怪异”的原因。字符。

始终记住,您必须始终初始化数据而不读取未初始化的变量,它们始终包含垃圾值。

您可以使用

初始化数组
char array[12] = {'\0'};

'\0'是用于在C中终止字符串的NUL终止符。

相关问题