#include<stdio.h>
#include<stdlib.h>
int my_puts(const char *);
int main(void)
{
int num;
const char name[50]="hello,\n my name is neo1218\n";
num = my_puts(name);
printf("name的长度是: %d\n", num);
return 0;
}
int my_puts(const char *string)
{
int count = 0;
while(*string){
putchar(*string++);
count++;
}
putchar('\n');
return (count);
}
在Ubuntu下编译成功没有warning,但运行后输出大量乱码。。求解!!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
原因可能因为 const char name[50]="hello,n my name is neo1218n"; 这一句声明的写法不太规范,一般的写法是这样的:
const char name[]="hello,n my name is neo1218n";
或者:
const char *name="hello,n my name is neo1218n";
一些题外话:
上面声明的name[50]会占用50个字符,而并没有显式告诉编译器给字符串一个结束符(0),所以不同的编译器对这一句的处理可能不太一样。如果非要声明一个占50字符长度的数组,可以用:
const char name[50]= {0}; //下面用memcpy,所以确保字符串后有0
memcpy(name, "hello,n my name is neo1218n", strlen("hello,n my name is neo1218n");
或
const char name[50];
strcpy(name, "hello,n my name is neo1218n"); //strcpy会添加0