双指针和字符

时间:2016-04-20 08:04:17

标签: c pointers char

我遇到了set_ccs函数的问题。我无法从用户那里获取元素。我该如何解决这个问题?

int main(){

    char *ccs;

    *ccs =(char*)malloc(sizeof(char) * 80);//i have to use dynamic memory allocation    
     printf("Enter CCS: ");
     set_ccs(&ccs); 
     free(ccs);
  return 0;
}

int set_ccs(char **ccs){

    int i = 0;

    scanf("%s",*ccs);//Is it better to use fgets? Because scanf seems to count 'enter'

    while(*ccs!='\0'){
       ccs++;
       i++;
    }

    printf("Length of sequence : %d\n",i);//It always return 3
    printf("%s",ccs); //with weird elements
 return i;
}

谢谢。

2 个答案:

答案 0 :(得分:0)

此:

char *ccs;

*ccs =(char*)malloc(sizeof(char) * 80);

错了,并且没有理智的编译器会接受它。你把指针推到char,它当然不合适。

应该是:

ccs = malloc(80);

无需按sizeof (char)进行缩放,即始终为1.

另外,please don't cast the return value of malloc() in C

答案 1 :(得分:0)

除了解开你应该使用的答案

Write-Host

你应该让函数char *ccs; ccs = malloc(80); 接受一个指针:

set_ccs()

从你的主要那样称呼它:

int set_ccs(char *ccs)

然后在您的函数中,您可以使用set_ccs(css); ,如下所示:

scanf()

现在,如果您要查看scanf("%s", css); ,最好在使用之前将“字符串”初始化为'\0'。您可以使用0代替calloc(80)来完成此操作。

如果你需要指向指针(malloc(80))的指针,你必须在你的主要指针中创建一个双指针,检查这段代码:

char **ccs