我在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;
}
答案 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]
。