我刚写了一个程序:
int main() {
char* test = malloc(5);
*test = "testc";
printf("Test=%c",test[4]);
}
我希望能给予我" c"但它最多只给我一点,最糟糕的是分段错误。我可能做错了什么?我是否需要创建一个单独的变量并将其strncpy()
放入其中?我也尝试过:
int main() {
char* test = malloc(5);
char* test2 = "test"
strncpy(test,test2,4);
}
哪种行为正确但似乎有点长。我在这里做错了吗?
答案 0 :(得分:1)
在你的情况下,
*test = "testc";
非常错误。您正在尝试将指针放入char
变量。在编译器中启用警告,它会尖叫。
你应该做的是,
malloc()
然后将strcpy()
字符串文字放入指针所指向的内存中。malloc()
,不要strcpy()
,请使用strdup()
并将结果存储在指针中。捕获量是(是)
free()
分配的内存。答案 1 :(得分:1)
在这个程序中
int main() {
char* test = malloc(5);
*test = "testc";
printf("Test=%c",test[4]);
}
你分配了内存
char* test = malloc(5);
结果指针test
指向分配的内存。
当您尝试重新分配prointer
时*test = "testc";
但是你使用了错误的语法。
表达式*test
的类型为char
,在此语句中,您尝试将test
指向的内存的第一个字符分配给字符串文字的地址。
但是如果你正确地将表达式写成
test = "testc";
存在内存泄漏,因为在这种情况下分配的内存地址丢失,内存不能释放。
此外,如果指针必须指向一个字符串,那么你需要分配6个字符来提供终止零,也将存储在已分配的内存中。
您需要的是以下
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main( void )
{
char *test = malloc( 6 );
strcpy( test, "testc" );
printf( "Test=%c\n",test[4] );
free( test );
}
或者你可以写
#include <stdio.h>
int main( void )
{
char *test = "testc";
printf( "Test=%c\n",test[4] );
}