我有一个函数,将int
数组作为参数。该int
数组表示一个字符串,但必须能够包含EOF
,因此不能是 type char[]
。我的函数看起来像这样:
_Bool fun(int str[]) {
// does something involving checking elements for EOF, e.g.:
return (str[0]==EOF);
}
出于测试目的,我想fun
使用字符串文字进行调用(尽管字符串文字自然是类型char[]
并且不能包含EOF
),实际上:
fun("test");
它将编译但带有关于错误参数类型的警告。这是意料之中的,因为字符串文字是char[]
并且参数是int[]
。
我可以这样做:
fun( (int*) "test");
这可能是等价的,只是我正在明确地进行强制转换,同样的编译警告。
我正在阅读不能保证转换为的内容(char*
链接)。在一般情况下这是很自然的,因为如果我现在尝试写一个大的 to ,它可能不适合 -只为 a 分配了内存(告诉我我是否错了)。int*
int
str[some_index]
str[some_index]
char
但是因为我不会做任何这样的写,而只是比较(并且比较 char 和 int 应该没问题) - 我可以接受上述任何一个吗?在这种情况下如何摆脱编译警告?或者解决这个问题的最佳方法是什么?
我当然可以编写一个简单的函数来将char
字符串文字给出的数组复制到一个int
数组中,值对值,但必须有更好的方法。这样的解决方案也会浪费内存。
(顺便说一句 - 当使用 进行测试时EOF
,我会做这样的事情:
int str[] = {'t', 'e', 's', 't', EOF};
fun(str);
应该可以正常工作。)