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