首页 > C语言自定义字符串输出函数

C语言自定义字符串输出函数

#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,但运行后输出大量乱码。。求解!!


Mac下编译运行过了,没问题,程序输出

hello,
 my name is neo1218

name的长度是: 27

确认一下你编译的是不是贴上来的程序?


原因可能因为 const char name[50]="hello,\n my name is neo1218\n"; 这一句声明的写法不太规范,一般的写法是这样的:
const char name[]="hello,\n my name is neo1218\n";
或者:
const char *name="hello,\n my name is neo1218\n";

一些题外话:
上面声明的name[50]会占用50个字符,而并没有显式告诉编译器给字符串一个结束符(\0),所以不同的编译器对这一句的处理可能不太一样。如果非要声明一个占50字符长度的数组,可以用:
const char name[50]= {0}; //下面用memcpy,所以确保字符串后有\0
memcpy(name, "hello,\n my name is neo1218\n", strlen("hello,\n my name is neo1218\n");

const char name[50];
strcpy(name, "hello,\n my name is neo1218\n"); //strcpy会添加\0

【热门文章】
【热门文章】