如何创建一个gets函数,使用getchar函数返回返回的char *?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (98)

我有一段时间有这个问题。我无法创建一个允许用户使用get_char()函数获取char *的gets(int maxChar)函数。

我目前的代码:

char* gets(int maxChar) {
    char a;
    char* b;
    int i;
    for(i = 0; i<maxChar; i = i + 1){
        a = getchar();
        if (a != 0x0D) {putchar(a);} else {puts("\r\n");break;}
        b[sizeof(b)] = a;
    }
    if (sizeof(b) > maxChar-1) {puts("\r\n");}
    return b;
    //if (b[sizeof(b)-1] != '')
}

get_char()函数完美地运行。

提问于
用户回答回答于

这包括一些解释和一个调用示例:

char* _gets(int maxChar) // change name to avoid conflict with library 'gets'
{
    //char a; //addresses concern pointed out in comments. 
    int a;    //variable is used by function that can return EOF (-1)
    int i=0; //

    char* b = calloc(maxChar + 1, 1);//point pointer to memory (that it owns)
    if(b) //test for success before going on
    for(i = 0; i<maxChar-3; i = i + 1) // -3 to leave room for \r\n\0
    {

        a = getchar();
        if ((a != 0x0D) && (a != EOF)) 
        {
            putchar(a);
            b[i]=a;// place char into string accumulator
        }
        else break;// either EOF or <ENTER> occurred 

    }   // no need for else in this implementation as we can handle
        // the clean up once the conditions are met by outputting 
        // user's entries, then preparing your string (array) for return
    puts("\r\n");
    b[i++]='\r';
    b[i++]='\n';
    b[i++]='\0';

    return b;  // return  b (now a string)
    //if (b[sizeof(b)-1] != '')  // not sure what this was for
}

int main(void)
{ 
    char *strArray = _gets(10);//creates memory for strArray 
    printf("The array contains: %s", strArray );
    free(strArray );

    return 0;
}
用户回答回答于

更改

char* b;

char* b = (char *)malloc(maxChar);

b[sizeof(b)] = a;

改为

b[i] = a;

另外,改变

if (sizeof(b) > maxChar-1) {puts("\r\n");}

if (i > maxChar-1) {puts("\r\n");}

所做的更改是:

  1. 你已创建指针,但尚未分配任何内存。因此malloc声明。
  2. sizeof(b)将始终4用于32位编译器。你需要数组索引,由i
  3. 与2相同。

所属标签

可能回答问题的人

  • 女淘日记

    杭州吱吱吱科技 · 站长 (已认证)

    1 粉丝1 提问3 回答
  • 朝夕熊博客

    1 粉丝2 提问3 回答
  • 13火麒麟

    1 粉丝0 提问2 回答
  • 找虫虫

    6 粉丝0 提问2 回答

扫码关注云+社区

领取腾讯云代金券