int main(int argc, char * argv[]){
char file_extension[10];
strncat(file_extension, argv[2][5], 6);
当我这样做时,我得到“警告:传递 'strncat' 的 arg 2 使指针从整数而不进行强制转换'。有谁知道如何解决这个问题?
argv[2]是 a char *,所以这会使argv[2][5]achar
strncat只接受char *参数!
因此,如果我最终设法正确理解了您所有模棱两可的评论:您似乎想复制字符串的一部分。
const char foo[] = "abcdefghijklm";
const size_t start = 3;
const size_t len = 5;
char the_copy[len + 1];
memcpy(the_copy, foo + start, len);
the_copy[len] = 0;
argv[2][5]只是一个字符。
尝试使用argv[2].
你有几个问题:
argv[2][5]是单个字符:第 3 个输入参数的第 6 个字符,但 的第二个参数strncat采用指向字符(即 C 字符串)的指针,而不是单个字符file_extension开始时不是空终止的(它是未初始化的),所以调用它是未定义的strncat行为strncat是要连接的源字符串的最大字符数,而不是输出缓冲区的大小——它不能保护您免受缓冲区溢出的影响。strncpy而不是strncat,那么您还需要注意strncpy 不一定会以空值终止输出这些问题有一些简单的解决方法,但对您来说最好的解决方法取决于您将要做什么:文件扩展名是只读的吗?你在构建一个新的文件名吗?它会发生什么?
我强烈建议你买一本关于 C 字符串和 C 编程的好书,而不是在没有充分理解它在做什么的情况下盲目地编写字符串代码,尤其是当代码编写不正确时存在缓冲区溢出和内存损坏的高风险.