用字符填充动态分配的字符串将导致空字符串C

用字符填充动态分配的字符串将导致空字符串C,c,string,memory,malloc,C,String,Memory,Malloc,使用此代码,我可以打印每个字符,例如printf%c、*-c,但是当我尝试使用printf%s打印整个字符串时,c;这个程序什么也不打印!为什么会发生这种情况?指针已移动。因此,它现在指向最后一个字符,即\0。因此,没有打印任何内容。将指针保留在另一个变量中,并尝试使用该变量进行打印。然后它将正确打印 尝试以下方法: int main(){ char *c=(char*)malloc(4*sizeof(char)); *c='a'; c++; *c='b';

使用此代码,我可以打印每个字符,例如printf%c、*-c,但是当我尝试使用printf%s打印整个字符串时,c;这个程序什么也不打印!为什么会发生这种情况?

指针已移动。因此,它现在指向最后一个字符,即\0。因此,没有打印任何内容。将指针保留在另一个变量中,并尝试使用该变量进行打印。然后它将正确打印

尝试以下方法:

int main(){
    char *c=(char*)malloc(4*sizeof(char));
    *c='a';
    c++;
    *c='b';
    c++;
    *c='c';
    c++;
    *c='\0';
    printf("%s",c);
    return 0;
}

指针已移动。因此,它现在指向最后一个字符,即\0。因此,没有打印任何内容。将指针保留在另一个变量中,并尝试使用该变量进行打印。然后它将正确打印

尝试以下方法:

int main(){
    char *c=(char*)malloc(4*sizeof(char));
    *c='a';
    c++;
    *c='b';
    c++;
    *c='c';
    c++;
    *c='\0';
    printf("%s",c);
    return 0;
}

C是指针,因此表达式C++;更改指针位置。调用C++ 3次后,C指向0。要解决此问题,请创建一个临时指针来遍历元素。您的程序也有内存泄漏。别忘了释放记忆

< P> C是指针,因此表达式C++;更改指针位置。调用C++ 3次后,C指向0。要解决此问题,请创建一个临时指针来遍历元素。您的程序也有内存泄漏。别忘了释放记忆

因为您的字符串现在指向分配字符串中的最后一个字符。 试试像这样的东西

int main()
{
    char *p;
    char *c=(char*)malloc(4*sizeof(char));
    p = c;
    *c='a';
    c++;
    *c='b';
    c++;
    *c='c';
    c++;
    *c='\0';
    printf("%s",p);
    free(p);
    return 0;
}

因为您的字符串现在指向分配字符串中的最后一个字符。 试试像这样的东西

int main()
{
    char *p;
    char *c=(char*)malloc(4*sizeof(char));
    p = c;
    *c='a';
    c++;
    *c='b';
    c++;
    *c='c';
    c++;
    *c='\0';
    printf("%s",p);
    free(p);
    return 0;
}
您已将c增加到最后一个字符“\0”。。。所以没什么可打印的

您可以将代码更改为:

int main(){
    char *c=(char*)malloc(4*sizeof(char));
    char* temp = c;
    *c='a';
    c++;
    *c='b';
    c++;
    *c='c';
    c++;
    *c='\0';
    printf("%s",c); // as a result of ++ operator, your pointer is no longer point at the beginning of string
    printf("%s,temp"); // << This will print whole string as it still pointed to the first address of the string
    free(temp);
    return 0;
}

您已将c增加到最后一个字符“\0”。。。所以没什么可打印的

您可以将代码更改为:

int main(){
    char *c=(char*)malloc(4*sizeof(char));
    char* temp = c;
    *c='a';
    c++;
    *c='b';
    c++;
    *c='c';
    c++;
    *c='\0';
    printf("%s",c); // as a result of ++ operator, your pointer is no longer point at the beginning of string
    printf("%s,temp"); // << This will print whole string as it still pointed to the first address of the string
    free(temp);
    return 0;
}


您已将c增加到最后一个字符“\0”。。。所以没有要打印的内容。当您打印f%s,c;c指向\0@Jarod42谢谢,明白了@DimChtz谢谢,明白了!这真的是一个错误,你应该能够发现自己是的,这包括初学者。下次请使用调试器,单步执行,并在询问之前查看变量。您已将c增加到最后一个字符“\0”。。。所以没有要打印的内容。当您打印f%s,c;c指向\0@Jarod42谢谢,明白了@DimChtz谢谢,明白了!这真的是一个错误,你应该能够发现自己是的,这包括初学者。下次请使用调试器,单步执行,并在询问之前观察变量。内存泄漏在哪里?内存泄漏在哪里?