将字符数组强制转换为const char*

8

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

现在输入的字符串是"abc.txt"。

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

我尝试进行强制类型转换并传递它,但通过使用GDB,我感觉由于input中剩余的192个空位填充了垃圾(或为空),所以该函数不接受它。当我向该函数传递字符串字面量"a.txt"时,它可以正常工作。因此,此时我想从input数组中提取填充的元素并将其转换为const char *。

我正在从用户处获取文件名作为输入,因此我使用了一个字符数组来存储输入。

   int main()
    {
    char *name;

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

    name = input;

    sys_open(input, "O_RDWR", 00700);


    }

就像我在我的回答评论中所说的那样,open 的第二个参数(或者说 sys_open(你不应该直接调用它))不是一个字符串。 - Some programmer dude
是的,那么为什么你把第二个参数传递为字符串? - Some programmer dude
如果您使用 fgets,那么它会在字符串中保留换行符。使用 input[strlen(input) - 1] = '\0'; 来删除最后一个字符(即换行符)。 - Some programmer dude
@JoachimPileborg 这就是我所做的,但仍然不起作用。如果我传递一个字符数组,那么它是好的。如果我传递一个使用读写系统调用输入的字符数组,则不好。 - user1888502
你在另一个问题中发布了相同的虚假代码?为什么会这样?这只证明你在提问之前没有阅读相关资料。 - Jens Gustedt
显示剩余12条评论
2个回答

11

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

在gdb中看到所有垃圾的原因是数组没有预初始化以包含任何内容,因此您只能看到之前存在的任何垃圾。只要您的字符串是以空字符结尾的,就应该没问题。


如果我有一个字符串复制到它,我需要为char分配内存吗?因为尽管知道char中有一些文本,但对我来说它不起作用。我感觉它分配的空间是200,但有时用户只能传递5个字符,其余的194个是空的,因此函数无法正确解析它。 - user1888502

2

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

“垃圾”问题是由于该数组所在的内存中存在的内容。重要的是要确保字符串以'\0'字符结尾。

因此,字符串"abc.txt"看起来像这样

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

这之后的内容都不重要,因为所有字符串函数都会在 '\0' 处停止。

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


如果我有一个长度为200的数组,并且使用write系统调用,用户传递abc.txt,我可以将其作为const char*参数传递给sys_open吗?这就是我正在做的事情,但它不起作用。我的逻辑是正确的,因为在同一函数中当我将"abc.txt"作为字面量传递时,它可以工作。 - user1888502
1
@user1888502 或许你应该展示一下如何使用这个数组?看起来你正在使用 sizeof 来给 write 调用传递长度,而你应该使用 strlen - Some programmer dude
抱歉,我是说读取(read),而不是打开(open)。我的意思是sys_read函数,它的参数为const char*,当我传递abc.txt时,我得到了我想要的结果。当用户将abc.txt传递给我的字符数组时,我知道我已经拥有它(尽管数组分配了200),但当我将我的数组传递给read函数时,而不是字面量“abc.txt”,它无法正常工作。 - user1888502
@user1888502 请编辑您的问题,展示您遇到问题的实际代码,没有看到实际代码很难理解您在做什么。也许可以创建一个SSCCE来帮助我们更好地理解您的问题? - Some programmer dude
抱歉,我是指读取。我的开放作品,我想说的是读取;例如sys_read,它的参数是const char*,当我传递abc.txt时,我得到了我想要的结果。当用户将abc.txt传递给我的字符数组时,我知道我已经拥有它(尽管为数组分配了200个字节),但当我将我的数组传递给read函数时,而不是字面上的“abc.txt”,它不起作用。- 用户1888502 1分钟前编辑 - user1888502
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接