C 打印结果时出现未知符号
我有两种方法来达到同样的目的,第一种方法打印未知符号,第二种方法打印我想要的东西 第一种方式:C 打印结果时出现未知符号,c,C,我有两种方法来达到同样的目的,第一种方法打印未知符号,第二种方法打印我想要的东西 第一种方式: const char *constStr = "Hello world"; char *str = (char*) malloc(strlen(constStr) + 1), *p = str; while (*constStr) { *p = *constStr; constStr++; p++; } printf("%s\n", str); free(str); 结果是:
const char *constStr = "Hello world";
char *str = (char*) malloc(strlen(constStr) + 1), *p = str;
while (*constStr) {
*p = *constStr;
constStr++;
p++;
}
printf("%s\n", str);
free(str);
结果是:
第二种方式:
const char *constStr = "Hello world";
char *str = (char*) malloc(strlen(constStr) + 1);
for (int i = 0; i <= strlen(constStr); i++) {
str[i] = constStr[i];
}
printf("%s\n", str);
free(str);
const char*constStr=“你好世界”;
char*str=(char*)malloc(strlen(constStr)+1);
对于(int i=0;iNo),您没有使用null终止字符串。使用%s
格式说明符在printf
中传递指向非null终止字符数组的指针是未定义的行为
在循环外,make*p=0
。这将使字符数组终止为null
第二种方法是打印,因为您复制了数组的strlen(constStr)
索引中的\0
。请注意要修复第一种方法,请在字符串末尾添加null:
const char *constStr = "Hello world";
char *str = (char*) malloc(strlen(constStr) + 1), *p = str;
while (*constStr) {
*p = *constStr;
constStr++;
p++;
}
*p = '\0'; /* <-- HERE */
printf("%s\n", str);
free(str);
const char*constStr=“你好世界”;
char*str=(char*)malloc(strlen(constStr)+1),*p=str;
while(*constStr){
*p=*constStr;
constStr++;
p++;
}
*p='\0';/*而(*constStr){
在复制\0
@johnnymapp:谢谢。@LionKing:检查代码…更简洁的方法。@coderredoc:完成,谢谢。
const char *constStr = "Hello world";
char *str = (char*) malloc(strlen(constStr) + 1), *p = str;
while (*constStr) {
*p = *constStr;
constStr++;
p++;
}
*p = '\0'; /* <-- HERE */
printf("%s\n", str);
free(str);