复制字符的指针问题

时间:2018-06-26 00:35:39

标签: c

我在使用getstring时遇到问题。我不知道为什么它不起作用,主函数printf中的输出什么也没放

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char *getstring(unsigned int len_max)
{
    char *linePtr = malloc(len_max + 1); // Reserve storage for "worst case."
    if (linePtr == NULL) { return NULL; }
    int c = 0;
    unsigned int i = 0;
    while (i < len_max && (c = getchar()) != '\n' && c != EOF){
        *linePtr++ = (char)c;
        i++;
    }

    *linePtr = '\0';

    return linePtr;
}

int main()
{

    char *line = getstring(10);

    printf("%s", line);
    free(line);

    return 0;
}

2 个答案:

答案 0 :(得分:2)

问题是linePtr指向包含输入行的字符串的 end ,而不是开头,因为您在循环中执行了linePtr++

使用linePtr而不是递增linePtr[i++]来存储循环中的每个字符。

char *getstring(unsigned int len_max)
{
    char *linePtr = malloc(len_max + 1); // Reserve storage for "worst case."
    if (linePtr == NULL) { return NULL; }
    int c = 0;
    unsigned int i = 0;
    while (i < len_max && (c = getchar()) != '\n' && c != EOF){
        linePtr[i++] = (char)c;
    }

    linePtr[i] = '\0';

    return linePtr;
}

如果确实需要通过增加指针来做到这一点,则需要将linePtr的原始值保存在另一个变量中,并返回该值而不是您递增的值。

答案 1 :(得分:0)

您的问题是您要返回缓冲区的末尾,您需要保留linePtr的副本或对其进行索引。 (您正在循环中对其进行递增);