我有一个长字符串,我需要将字符串复制到\ n或EOF
这是我得到的
char static_ip[20]="9.2.1.333";
int index=0;
while (*ptr_place!='\n' && *ptr_place!=EOF){
static_ip[index]=*ptr_place;
index++;
ptr_place++;
}
static_ip[index]='\0'
更好的了解如何做到这一点?
文字就像
44.11.5.856
bla bla = 22.11.444.8
的Olala
当static_ip只包含没有换行符或没有换行符的44.11.5.856时,我想结束程序
答案 0 :(得分:3)
而不是
char* static_ip[20]="9.2.1.333";
使用
char static_ip[20]="9.2.1.333";
// ^^ no *
此外,
while (*ptr_place!='\n' && *ptr_place!=EOF){
不对。
EOF
用于在从文件读取数据时检测文件结尾。它通常定义为-1
。将char
与EOF
进行比较似乎并不正确。
while (*ptr_place!='\n' && *ptr_place!= '\0'){
看起来像你需要的。您还应该添加一项检查,以确保您不会使用static_ip
越界。
while (*ptr_place!='\n' && *ptr_place!= '\0' && i < 19){
在static_ip
循环后添加一行以终止while
。
static_ip[i] = `\0';
答案 1 :(得分:1)
OP要求提供三个文本示例的解决方案,其中一个示例不包含IP地址。此代码提取IP地址并返回指向静态字符串的指针,否则返回NULL
。如果子字符串对于静态字符串来说太长,它也会返回NULL
。
它可能更复杂,并检查子字符串是否是有效的IP地址格式。我刚刚提取了一系列数字和句号,我把它留给你。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAXLEN 19
char *getIP(char *ptr_place)
{
static char static_ip[MAXLEN+1]; // static array
int len = 0;
while (!isdigit(*ptr_place)) { // stop at first digit
if (*ptr_place == '\0') // check for end of string
return NULL; // no digits found
ptr_place++;
}
while (isdigit(ptr_place[len]) || ptr_place[len] == '.') // IP address chars
if (++len > MAXLEN) // check substring length
return NULL; // won't fit target string
memcpy(static_ip, ptr_place, len); // copy substring to static str
static_ip[len] = '\0'; // terminate it
return static_ip;
}
int main()
{
char *text[3] = {"44.11.5.856", "bla bla = 22.11.444.8", "olala" };
int i;
char *p;
for (i=0; i<3; i++) {
p = getIP(text[i]); //test the function
if (p)
printf("IP address: %s\n", p);
else
printf("IP address: NULL\n");
}
return 0;
}
节目输出:
IP address: 44.11.5.856
IP address: 22.11.444.8
IP address: NULL
请注意,静态字符串内容将无法再次调用该函数。