hello everyone

i want to input ip like a char,then split into "127 0 0 1"
so that i can scan ips for start ip to end ip.
I tried with strtok spliting but program crashes when i do

sprintf (buffer, "%s",pch[1]);

Edited by zuki88

4 Years
Discussion Span
Last Post by L7Sqr

Could you please post the code you have. The information you've provided so far isn't enough to do anything more than take wild guesses.

#include <stdio.h>
#include <iostream.h>
#include <string.h>
int main ()
  char buffer [50];
  char buf[50];
  char * pch;

  cin >> buf;
pch = strtok (buf,".");
for (pch[3] = 1;pch[3] < 255;pch[3]++)
  sprintf (buffer, "%s.%s.%s.%s",pch[0],pch[1],pch[2],pch[3]);
  return 0;

Edited by zuki88


I think this is an excellent use case for strtol. It allows you to provide an end marker that indicates where the last translation ended. For a well-formed (see note below) IP string, that is always going to be a period. Given that, you can construct something like:

#include <cstdio>
#include <cstdlib>

int main (int argc, char ** argv) {
    char * ip = argv[1], *next = 0;
    long quad[3] = {0};
    for (int i = 0; i < 3; ++i) {
        quad[i] = strtol (ip, &next, 10);
        ip = next + 1;
    for (int i = 1; i < 255; ++i)
        printf ("%d.%d.%d.%d\n", quad[0], quad[1], quad[2], i);
    return 0;

And it will parse the first three octets and generate a sequence of all addresses with a /24 mask. For example:

$ ./a.out

NOTE: It is up to you to verify well-formedness. My example elides much error checking for the sake of brevity.

Edited by L7Sqr


yes i see that you are on linux.im on the windows and its the same program chrashes


I don't have access to a Windows build environment at the moment. Once I get to one I will try to reproduce the problem you are seeing.

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.