【发布时间】:2017-10-12 23:35:25
【问题描述】:
我正在尝试连接两个字符串,以便获得文件路径。但是,我在 valgrind 中收到错误
条件跳转或移动取决于未初始化的值
我的代码:
/**
* @brief Concatenate two strings to get file path
* @param firstP - First string
* @param secondP - Second string
* @return Returns the concatenated string
*/
char *getPathDir(char *firstP, char *secondP) {
char *new_str;
int stringSize = strlen(firstP)+strlen(secondP)+2;
if((new_str = malloc(stringSize)) != NULL){
new_str[0] = '\0';
strcat(new_str,firstP);
new_str[strlen(firstP)] = '/';
strcat(new_str,secondP);
} else {
perror("malloc");
cleanUp();
exit(EXIT_FAILURE);
}
return new_str;
}
【问题讨论】:
-
sprintf(new_str, "%s/%s", firstP, secondP);而不是。new_str[strlen(firstP)] = '/';覆盖字符串的最后一个空终止符。所以第二个strcat找不到正确字符串的结尾。 -
有更好的方法来做到这一点...... strcat 函数。请参阅:tutorialspoint.com/c_standard_library/c_function_strcat.htm 或 @BLUEPIXY 建议:)
-
@BLUEPIXY 我删除了 if 语句中的所有内容并将其替换为 sprintf(new_str, "%s/%s", firstP, secondP);它现在完美无缺。谢谢:)