为什么strcat产生这个错误?

时间:2017-03-20 17:49:20

标签: c arrays strcat lzw

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

2 个答案:

答案 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]也不是指向字符串的指针。