在使用malloc创建的String中按字符编写字符?

时间:2014-03-31 00:23:19

标签: c pointers malloc pointer-arithmetic

如果我分配了一些记忆,为什么我不能逐字逐句地写字?以下printf不输出任何内容。我在这里缺少什么?

int main()
{
        char *newStr = NULL;
        newStr = (char *) malloc ((2) * sizeof(char));
        *newStr = 'a';
        newStr++;
        *newStr = '\0';
        printf("%s", newStr);
}

1 个答案:

答案 0 :(得分:3)

这是因为您正在移动指针,因此printf("%s", newStr);尝试仅打印\0

试试这个:

    char *newStr = NULL;

    newStr = malloc(2 * sizeof(char));
    *newStr = 'a';
    newStr++;
    *newStr = '\0';
    newStr--;
    printf("%s", newStr);


或者这个:

    char *newStr = NULL;
    char *backupedPointer = NULL;

    newStr = malloc(2 * sizeof(char));
    backupedPointer = newStr;
    *newStr = 'a';
    newStr++;
    *newStr = '\0';
    printf("%s", backupedPointer);


就像Matt McNabb在评论中说的那样,你应该在最后添加free()来释放你分配的记忆(一个malloc() =一个free(),总是):

    char *newStr = NULL;
    char *backupedPointer = NULL;

    newStr = malloc(2 * sizeof(char));
    backupedPointer = newStr;
    *newStr = 'a';
    newStr++;
    *newStr = '\0';
    printf("%s", backupedPointer);
    free(backupedPointer);


最好的解决方案之一是:

    char *newStr = NULL;

    newStr = malloc(2 * sizeof(char));
    newStr[0] = 'a';
    newStr[1] = '\0';
    printf("%s", newStr);
    free(newStr);