用字符填充动态分配的字符串将导致空字符串C
使用此代码,我可以打印每个字符,例如printf%c、*-c,但是当我尝试使用printf%s打印整个字符串时,c;这个程序什么也不打印!为什么会发生这种情况?指针已移动。因此,它现在指向最后一个字符,即\0。因此,没有打印任何内容。将指针保留在另一个变量中,并尝试使用该变量进行打印。然后它将正确打印 尝试以下方法:用字符填充动态分配的字符串将导致空字符串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';
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谢谢,明白了!这真的是一个错误,你应该能够发现自己是的,这包括初学者。下次请使用调试器,单步执行,并在询问之前观察变量。内存泄漏在哪里?内存泄漏在哪里?