int main(int argc, char * argv[]){
char file_extension[10];
strncat(file_extension, argv[2][5], 6);
当我这样做时,我得到“警告:传递'strncat'的arg 2使得整数指针没有强制转换'。有没有人知道如何解决这个问题?
答案 0 :(得分:3)
argv[2]
是char *
,因此argv[2][5]
成为char
strncat
仅接受char *
个参数!
答案 1 :(得分:2)
argv[2][5]
仅限char。
只使用argv[2]
。
答案 2 :(得分:2)
因此,如果我最终能够正确理解你所有不明确的评论:似乎你想要复制一个字符串的一部分。
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;
答案 3 :(得分:1)
你有几个问题:
argv[2][5]
是单个字符:第3个输入参数的第6个字符,但strncat
的第二个参数采用指向字符的指针(即C字符串) ),而不是单个字符file_extension
以空格终止(它未初始化),因此调用strncat
的未定义行为strncat
的最后一个参数是要连接的源字符串的最大字符数,而不是输出缓冲区的大小 - 它不能保护您免受缓冲区溢出的影响。strncpy
而不是strncat
,那么你还需要注意strncpy
does not necessarily null-terminate the output 对这些问题有一些简单的解决方法,但最适合您的方法取决于您将要做的事情:文件扩展名是否为只读?你在构建一个新的文件名吗?它会发生什么?
我强烈建议您获得一本关于C字符串和C编程的好书,而不是试图盲目地编写字符串代码而不必深入了解它正在做什么,尤其是缓冲区溢出的高风险代码编写不正确时内存损坏。