Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 打印结果时出现未知符号_C - Fatal编程技术网

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);