It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center。
7年前关闭。
当我这样做时,我得到“警告:传递'strncat'的arg 2使指针从整数转换而无需强制转换'。有人知道如何解决此问题吗?
7年前关闭。
int main(int argc, char * argv[]){
char file_extension[10];
strncat(file_extension, argv[2][5], 6);
当我这样做时,我得到“警告:传递'strncat'的arg 2使指针从整数转换而无需强制转换'。有人知道如何解决此问题吗?
最佳答案
您有几个问题:argv[2][5]
是单个字符:第3个输入参数的第6个字符,但strncat
的第二个参数采用指向字符(即C字符串)的指针,而不是单个字符file_extension
开头不是空终止(未初始化),因此在其上调用strncat
是未定义的行为strncat
的最后一个参数是要连接的源字符串的最大字符数,而不是输出缓冲区的大小-它不能保护您免受缓冲区溢出的影响。
如果您实际上打算写strncpy
而不是strncat
,那么您还需要知道strncpy
does not necessarily null-terminate the output
这些问题很容易解决,但是最适合您的解决方案取决于您要执行的操作:文件扩展名是只读的吗?您要构造一个新的文件名吗?它会发生什么?
我强烈建议您获得一本有关C字符串和C编程的好书,而不是在没有扎实的了解它的作用的情况下盲目地编写字符串代码,尤其是当代码编写不正确时,缓冲区溢出和内存损坏的风险很高。 。
关于c - (C)如何将strncat()与** argv一起使用? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14779585/
10-13 23:12