从C

时间:2015-05-19 07:42:25

标签: c string

我有一个长字符串,我需要将字符串复制到\ 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时,我想结束程序

2 个答案:

答案 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。将charEOF进行比较似乎并不正确。

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

请注意,静态字符串内容将无法再次调用该函数。