警告:从不兼容的指针类型[默认启用]传递'cat'的参数1

时间:2015-12-05 00:12:55

标签: c

我在cat函数中输入参数时遇到了问题。我想,因为我正在改变温度,我需要传递地址,因为我希望能够在主要中看到它。我想我已经被腐朽搞砸了。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
/* Swaps strings by swapping data*/
void swap2(char *str1, char *str2)
{
char *temp = (char *)malloc((strlen(str1) + 1) * sizeof(char));
strcpy(temp, str1);
strcpy(str1, str2);
strcpy(str2, temp);
free(temp);
} 
void cat(char *temp, char *strings_line_tokens[])
{
    strcat (temp,strings_line_tokens[1]);
    strcat (temp,strings_line_tokens[2]);
    strcat (temp,strings_line_tokens[3]);
}
int main()
{
    char str1[10] = "geeks";
    char str2[10] = "forgeeks";
    char temp[80] = {0};
    char *strings_line_tokens[503] = {0};
    int lower_bound_of_big_boy_counter = 0;
    strings_line_tokens[0] = malloc(strlen("string")+1);
    strcpy(strings_line_tokens[0], "string");
    strings_line_tokens[1] = malloc(strlen("string1")+1);
    strcpy(strings_line_tokens[1], "string1");
    strcpy (temp,strings_line_tokens[0]);
    lower_bound_of_big_boy_counter++;
    cat(&temp, strings_line_tokens)
    printf("temp is %s", temp);
    swap2(str1, str2);
    printf("str1 is %s, str2 is %s", str1, str2);
    getchar();
    return 0;
}

工作代码。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

/* Swaps strings by swapping data*/
void swap2(char *str1, char *str2)
{
char *temp = (char *)malloc((strlen(str1) + 1) * sizeof(char));
strcpy(temp, str1);
strcpy(str1, str2);
strcpy(str2, temp);
free(temp);
} 

void cat(char *temp, char *strings_line_tokens[])
{
    strcat (temp,strings_line_tokens[1]);
    strcat (temp,strings_line_tokens[2]);
}

int main()
{
    char str1[10] = "geeks";
    char str2[10] = "forgeeks";
    char temp[80] = {0};
    char *strings_line_tokens[503] = {0};
    int lower_bound_of_big_boy_counter = 0;

    strings_line_tokens[0] = malloc(strlen("string")+1);
    strcpy(strings_line_tokens[0], "string");

    strings_line_tokens[1] = malloc(strlen("string1")+1);
    strcpy(strings_line_tokens[1], "string1");

    strings_line_tokens[2] = malloc(strlen("string2")+1);
    strcpy(strings_line_tokens[2], "string1");

    strcpy (temp,strings_line_tokens[0]);
    lower_bound_of_big_boy_counter++;

    cat(temp, strings_line_tokens);
    printf("temp is %s \n", temp);

    swap2(str1, str2);
    printf("str1 is %s, str2 is %s\n", str1, str2);
    getchar();
    return 0;
}

http://ideone.com/rQM5qL

2 个答案:

答案 0 :(得分:1)

temp的类型为char[80],而&temp的类型为char (*)[80],与char *所需的cat()不兼容,消息说。

数组temp将被用作函数参数时自动转换为指向数组第一个元素的指针(更一般地说,除了sizeof和一元{{1}之外的运算符的操作数}}),所以你不必在这里使用&

总之,试试&(别忘了用分号!)

答案 1 :(得分:1)

cat(&temp, strings_line_tokens)

必须是

cat(temp, strings_line_tokens);
                              ^ also don't forget the ;
转化后的

temp类型为char *,但&temp的类型指针指向char [80]