我在 C 中的 strca
t 遇到了一个奇怪的问题。这是代码:
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
中定义x
为char *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/