簡體   English   中英

strcat的問題

[英]Problems with strcat

我在C strca有一個奇怪的問題。這是代碼:

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在它應該返回的內容的開頭和結尾返回一些隨機字符。

您的代碼中存在許多問題:

  • 定義xgetip作為char *x[255]它應該是char x[255]
  • 你應該在調用strcat之前初始化x或使用strcpy
  • ip指向本地數組x ,將其返回給調用者會調用未定義的行為,因為它指向的數組在函數返回后無法使用。
  • adrr()相同問題
  • main沒有為scanf("%s",&n);定義n 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;
}
  1. 主要的n不存在
  2. 我想你考慮char buf [10]但寫char * buf [10]
  3. 如果返回指向僅存在於函數內部的內存的指針,則結果未定義。 使其靜態或動態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM