6

我有一个字符数组m char Input[200];

到目前为止,输入具有字符串“abc.txt”。

我有一个严格需要 const char * 的方法,如何将输入数组转换为 const char *。

我尝试强制转换它并传递它,但是在使用 GDB 时,我觉得由于输入中剩余的 192 个插槽充满了垃圾(或为空),因此函数不接受它。当我将字符串文字“a.txt”传递给它工作的函数时。所以此时我想从输入数组中提取填充的元素并将其转换为 const char *。

我将输入作为用户的文件名,所以我使用 char 数组来存储输入。

   int main()
    {
    char *name;

    char input[1024];
    strcpy(input, argv[1]);

    name = input;

    sys_open(input, "O_RDWR", 00700);


    }
4

2 回答 2

11

您应该可以直接通过它。char[] 可以转换为 const char *,但反之则不行。

您在 gdb 中看到所有垃圾的原因是因为数组未预先​​初始化以包含任何内容,因此您只是看到之前存在的任何垃圾。只要你的字符串是空终止的,它应该没问题。

于 2013-02-09T06:06:56.030 回答
2

数组自然会衰减为指针,所以这不是问题。

“垃圾”的问题是因为这就是数组所在的内存中的内容。需要注意的重要一点是字符串由'\0'字符终止。

所以字符串"abc.txt"看起来像这样

'a', 'b', 'c', '.', 't', 'x', 't', '\0'

这之后发生的事情并不重要,因为所有字符串函数都停在'\0'.

如果您使用包含字符串的数组,重要的是使用strlen获取长度,而不是sizeof,因为sizeof运算符给出整个数组的长度而不是包含的字符串。

于 2013-02-09T06:08:38.373 回答