我正在使用一个函数来通过userID,paswd和一些错误检查进行解析。该函数是从我的main()中调用的...但是,执行该函数时,仅成功提取了UserID和Pswd的前4个字符。我是C编程的新手,来自C#,我不确定我要去哪里。这应该很容易,有人可以指出正确的方向吗?
static void func1(int argc, char *argv[], char *UserID[30], char *Psw[30])
{
strncpy(UserID, argv[1], sizeof(UserID));
strncpy(Psw, argv[2], sizeof(Psw));
}
int main(int argc, char *argv[])
{
char UserID[30];
char Psw[30];
func1(argc, argv, UserID, Psw);
}
另外,要指出的是,如果我不使用外部函数,而是将所有代码都放在主函数中,那么它将起作用。
编辑:-
找出问题:
static void func1(int argc, char *argv[], char *UserID, char *Psw)
{
strncpy(UserID, argv[1], UserIDMaxSize);
strncpy(Psw, argv[2], PswMaxSize);
}
int main(int argc, char *argv[])
{
char UserID[UserIDMaxSize + 1]; /* max val defined in a header file */
char Psw[PswMaxSize + 1]; /* max val defined in a header file */
func1(argc, argv, UserID, Psw);
}
sizeof不能按我预期的那样工作..它正在读取指针的大小,默认情况下,该大小始终为4个字符。
将数组大小传递给函数
static void func1(int argc, char *argv[], char *UserID, size_t UserIDSize,
char *Psw, size_t PswSize)
{
if (argc> 1) strncpy(UserID, argv[1], UserIDSize);
if (argc> 2) strncpy(Psw, argv[2], PswSize);
}
int main(int argc, char *argv[])
{
char UserID[30] = {0};
char Psw[30] = {0};
func1(argc, argv, UserID, sizeof UserID, Psw, sizeof Psw);
}
为了确保目标数组以null字符终止,建议strncat()
->“始终在结果后附加一个终止null字符”。strncpy()
有太多问题,它并不总是导致数组包含空字符。
static void func1(int argc, char *argv[], char *UserID, size_t UserIDSize,
char *Psw, size_t PswSize) {
UserId[0] = '\0';
// if (argc> 1) strncat(UserID, argv[1], UserIDSize);
if (argc> 1) strncat(UserID, argv[1], UserIDSize - 1);
Psw[0] = '\0';
// if (argc> 2) strncat(Psw, argv[2], PswSize);
if (argc> 2) strncat(Psw, argv[2], PswSize - 1);
}
[编辑]
更正的代码-减1
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句