我有一个字符数组 char输入[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);
}
答案 0 :(得分:9)
您应该可以直接传递它。 char []可以转换为const char *,但反之亦然。
你看到gdb中所有垃圾的原因是因为数组没有预先初始化为包含任何东西,所以你只是看到之前的垃圾。只要您的字符串以空值终止,它应该没问题。
答案 1 :(得分:2)
阵列自然地衰减指针,因此不是问题。
"垃圾"的问题是因为那是阵列所在的内存中的内容。需要注意的重要事项是字符串由'\0'
字符终止。
所以字符串"abc.txt"
看起来像这样
'a', 'b', 'c', '.', 't', 'x', 't', '\0'
在此之后发生的事情并不重要,因为所有字符串函数都停留在'\0'
。
如果您使用的是包含字符串的数组,使用strlen
获取长度非常重要,而不是sizeof
,因为sizeof
运算符给出了长度整个数组而不是包含的字符串。