strcat 的问题
Problems with strcat
我在 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
return 正是我想要的 return,虽然函数 adrr
似乎什么都不做,但第二个 printf
return 开头和结尾的一些随机字符 return。
- main 中的 n 不存在
- 我想你想的是 char buf[10] 但写的是 char *buf[10]
- 如果您 return 指向仅存在于函数内部的内存的指针,则结果未定义。让它静态或动态。
你的代码有很多问题:
- 你在
getip
中定义x
为char *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;
}
我在 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
return 正是我想要的 return,虽然函数 adrr
似乎什么都不做,但第二个 printf
return 开头和结尾的一些随机字符 return。
- main 中的 n 不存在
- 我想你想的是 char buf[10] 但写的是 char *buf[10]
- 如果您 return 指向仅存在于函数内部的内存的指针,则结果未定义。让它静态或动态。
你的代码有很多问题:
- 你在
getip
中定义x
为char *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;
}