c - strcat 的问题

标签 c string c-strings 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 返回的正是我想要它返回的内容,虽然函数 adrr 似乎什么也没做,但第二个 printf 返回了一些它应该返回的开头和结尾的随机字符。

最佳答案

你的代码有很多问题:

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

第一个函数似乎纯粹是运气使然,它可能会在不同的系统上编译时失败,甚至可能会在不同的日期编译;-)

解决方法:

#include <stdio.h>

char *getip(char *dest, const char *src) {
    for (i = 0; src[i] != '\0' && src[i] != '/'; i++) {
        dest[i] = src[i];
    }
    dest[i] = '\0';
    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;
}

关于c - strcat 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40321196/

相关文章:

arrays - 下标值既不是数组,也不是指针,也不是 vector 。在C中使用结构体获取n个字符串的输入

c - 如何使用指针读取和打印数字和字符串?

c - 使用复合文字数组作为临时字符串缓冲区是否合理?

c - getchar() 和标准输入

c - 防止线程写入同一文件

c - C 中第一个堆栈中的项目无法到达第二个堆栈

javascript - 解码或转义字符串中的十六进制代码数字

c - 如何打印结构数组?

.net - 如何衡量字符串的复杂度?

c++ - 无法将 ‘std::string {aka std::basic_string<char>}’ 转换为 ‘char’ 作为返回