我初始化了一个整数数组,我后来在函数中调用它。我注意到值已经改变了。我该怎么做才能阻止这种情况发生?
void check(int arr[5][6]){
printf("%s", arr[0][0]);
}
int main(){
int arr[5][6];
arr[0][0] = 5;
check(arr);
}
答案 0 :(得分:3)
您未使用正确的格式说明符printf
。
要打印int
,您需要使用%d
格式说明符。您正在使用%s
,它需要一个指向空终止字符串的指针。
printf("%d", arr[0][0]);
使用不正确的格式说明符会导致undefined behavior。
答案 1 :(得分:0)
(0,0)
中存储在数组中的值没有改变。甚至,如果你把它传递给一个函数。您的程序中出现的错误是您希望printf
打印二维数组的int
数据类型的元素。
由于array
是数据类型int
的二维数组。存储在arr[0][0]
的元素将为int
数据类型。
因此,您需要将程序更改为:
void check(int arr[5][6])
{
printf("%d", arr[0][0]);
}
int main()
{
int arr[5][6];
arr[0][0] = 5;
check(arr);
}
您发布的代码将具有未定义的行为。您粘贴的代码会发出警告。通过使用gcc编译代码,看看我得到的警告。
警告:格式'%s'需要类型为'char *'的参数,但参数2的类型为'int'[-Wformat =] printf("%s",arr [0] [0]);
请记住:您永远不应忽视警告。
您使用了"%s"
格式说明符,该说明符假定指向参数列表中的字符数组的指针。您只需将其更改为"%d"
。
c中有许多格式说明符。下面给出的很少 -
%c - For Character Variable
%d - For Integers
%f - For Double
%s - For Null-Terminated Character Array
%p - For Pointers (of void * type)