strcat 的问题

Problems with strcat

我在 C 中遇到 strcat 的奇怪问题。这是代码:

char *getip(char n[])
{
    char *x[255];
    strcat(x, n);
    char *ip;
    ip = strtok(x, "/");
    return ip;
}

char *adrr(char n[])
{
    char *ip[255];
    strcat(ip, getip(n));
    return ip;
}

int main(void)
{
    scanf("%s", &n);
    printf("IP : %s\n", getip(n));
    printf("IP : %s", adrr(n));
}

第一个 printf return 正是我想要的 return,虽然函数 adrr 似乎什么都不做,但第二个 printf return 开头和结尾的一些随机字符 return。

  1. main 中的 n 不存在
  2. 我想你想的是 char buf[10] 但写的是 char *buf[10]
  3. 如果您 return 指向仅存在于函数内部的内存的指针,则结果未定义。让它静态或动态。

你的代码有很多问题:

  • 你在getip中定义xchar *x[255],应该是char x[255]
  • 您应该在调用 strcat 或使用 strcpy 之前初始化 x
  • ip 指向本地数组 x,将它返回给调用者调用未定义的行为,因为它指向的数组不能在函数 returns.[=36 之后使用=]
  • adrr()
  • 中有同样的问题
  • n 未在 main 中为 scanf("%s",&n);
  • 定义

第一个函数似乎完全出于运气而按预期工作,在不同的系统上编译时可能会失败,甚至只是在不同的日子;-)

这是一个解决方案:

#include <stdio.h>

char *getip(char *dest, const char *src) {
    for (i = 0; src[i] != '[=10=]' && src[i] != '/'; i++) {
        dest[i] = src[i];
    }
    dest[i] = '[=10=]';
    return dest;
}

int main(void) {
    char n[256];
    char ip[256];

    if (scanf("%255s", n) == 1) {
        printf("IP: %s\n", getip(ip, n));
    }
    return 0;
}