这就是问题所在:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void test_me(const char test_array[]){
printf("%s\n", test_array);
return;
}
void main(void){
char *string = "Successfull cast!";
const char test_array [100];
/*
* something that fills the const char test_array
* with the contend of *string
*/
test_me(test_array);
}
以下我尝试过:
strcpy(test_array, string); /*gcc: "...discards const qualifier..."*/
然后这个:
test_array[0] = string; /*gcc: "assignment of read-only location.."*/
......还有一些不合理的东西......
有人建议解决方案吗?
编辑:关键是,另一个模块的API请求const char[]
作为参数,但我以指针的形式排除了所请求的信息。那么我有没有办法用* string的竞争声明test_array?我知道const是只读的,但在某些时候必须声明一个const?
答案 0 :(得分:1)
解决方案是跳过声明中的const
关键字。如果你想写信,那么它显然不是一成不变的。
char test_array[100];
请注意,您可以将非const数组传递给需要const
数组的函数,但不能反过来。
答案 1 :(得分:0)
const
表示“只读”。由于您正在尝试执行写入,因此编译器正确地抱怨它。如果您打算写入test_array
(或稍后修改),那么使用const
对其进行限定是没有意义的。
因此,只需从const
中删除const char test_array [100];
。
关于你编辑:
关键是,另一个模块的API请求const char []作为参数,但我只能以指针的形式获得所请求的信息。
您可以随时char*
使用期望const char*
的函数 - 这在C中是允许的。您的API中的const
表示它表示它不打算修改内容你传递给它的指针。答案仍然是相同的:只需从const
const test_array[100];
即可
答案 2 :(得分:0)
您只需将指针传递给接受数组的函数即可。
在函数声明的上下文中,数组类型的形式参数被视为指针。
E.g。
void test_me(const char test_array[])
被解释为
void test_me(const char *test_array)
(见{{3}})