[Warning] passing argument 1 of 'strcat' makes pointer from integer without a cast
当我使用STRCAT时我会做什么错误,以下是我的代码
#include <stdio.h>
#include <string.h>
void main() {
char a[20], b[256], p = NULL, f;
int i, j, n, k, c[20], t, x, l;
printf("enter the no of possible characters");
scanf("%d", &k);
printf("enter the possible characters in the dictionary");
printf("hi");
for (i = 0; i < k; i++) {
c[i] = (i);
a[i] = getchar();
}
for (i = 0; i < k; i++) {
printf("%d %s\n ", c[i], a[i]);
}
l = k;
printf("enter the string\n");
scanf("%s", &b);
n = strlen(b);
printf("%d", n);
for (i = 0; i < n; i++) {
strcat(p, b[i]);
}
getch();
}
答案 0 :(得分:3)
这是因为strcat
采用以空字符结尾的字符串,而不是单个字符。您可以通过在位置b
上空终止n
并稍后调用strcat
来解决此问题:
b[n] = '\0';
strcat(p, b);
这会将n
的初始b
个字符追加到p
,一次性完成。当然,鉴于p
中没有任何字符,这完全没有意义:你也可以使用strcpy
。当然,您需要将p
声明为足够大的字符缓冲区,以容纳所有b
:
char a[20],b[256],p[256]={0},f;
// ^^^^^^^^^
b[n] = '\0';
strcpy(p, b);
答案 1 :(得分:2)
您的变量定义错误。
char a[20],b[256],p=NULL,f;
不将p
定义为指针。它是char
变量,不是strcat()
的第一个参数的预期类型。
您需要将p
定义为指向字符串的指针,该字符串具有足够的内存来保存连接结果。
那就是说,
strcat(p,b[i]);
完全错误,因为b[i]
也不是指向字符串的指针。