c:指向char char数组的字符串指针

时间:2016-11-21 11:04:41

标签: c pointers casting

这就是问题所在:

#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?

3 个答案:

答案 0 :(得分:1)

解决方案是跳过声明中的const关键字。如果你想写信,那么它显然不是一成不变的。

    char test_array[100];

请注意,您可以将非const数组传递给需要const数组的函数,但不能反过来。

答案 1 :(得分:0)

C中的

const表示“只读”。由于您正在尝试执行写入,因此编译器正确地抱怨它。如果您打算写入test_array(或稍后修改),那么使用const对其进行限定是没有意义的。 因此,只需从const中删除const char test_array [100];

关于你编辑:

  

关键是,另一个模块的API请求const char []作为参数,但我只能以指针的形式获得所请求的信息。

您可以随时char*使用期望const char*的函数 - 这在C中是允许的。您的API中的const表示它表示它不打算修改内容你传递给它的指针。答案仍然是相同的:只需从const

中删除const test_array[100];即可

另请阅读:http://c-faq.com/ansi/constmismatch.html

答案 2 :(得分:0)

您只需将指针传递给接受数组的函数即可。

在函数声明的上下文中,数组类型的形式参数被视为指针。

E.g。

void test_me(const char test_array[])

被解释为

void test_me(const char *test_array)

(见{{3}})