如果我分配了一些记忆,为什么我不能逐字逐句地写字?以下printf不输出任何内容。我在这里缺少什么?
int main()
{
char *newStr = NULL;
newStr = (char *) malloc ((2) * sizeof(char));
*newStr = 'a';
newStr++;
*newStr = '\0';
printf("%s", newStr);
}
答案 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);