似乎无法正确设置char *

时间:2016-03-28 06:33:56

标签: c

我刚写了一个程序:

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);
}

哪种行为正确但似乎有点长。我在这里做错了吗?

2 个答案:

答案 0 :(得分:1)

在你的情况下,

 *test = "testc";

非常错误。您正在尝试将指针放入char变量。在编译器中启用警告,它会尖叫。

你应该做的是,

  • 不要malloc,并直接将字符串文字指定给指针。
  • 使用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] );
}