Hello:

I bumped into a curious problem with the argv variables changing, when a certain file named "1" is added into the local directory of the executable.

Here is the test file, a simple program named test.c

#include <stdio.h>
#include <string.h>

int main(int argc, char **argv) {

  int i=1;
  //int STDIN = 1;

  char INCURV[1024] = {'\0'};

  while(i<argc) {
    if (!strcmp(argv[i],"-curve")) {
      printf("we are here \n");
      //strcpy(INCURV,argv[i+1]); STDIN=0; i+=2;
    }
    i+=1;
  }
  return 0;
}

I compile this file as

% gcc -o wack test.c -ggdb

(it is too easy to wipe out the source file if the object name almost matches)

gcc is gcc version 7.5.0 (SUSE Linux)

I have the gdb debugger stop on line 13 "printf("we are here\n");"

Using input to the command:

% wack -arderivs -curve [0,0,0,-1156,0]

when no file named "1" exists in the directory  then argv looks okay

argv[0] = "/../../wack"

argv[1] = "-arderivs"

argv[2] = "-curve"

argv[3] = "[0,0,0,-1156,0]"

argv[4] = 0x0

which is all fine and well.

I used the touch command to create file "1" in the local directory

% touch 1

and restart the gdb debugger.

argc count = 4 as expected

but argv[3] = "1"

Is this a bug in c?

Why is argv[3] changed?

Randall


Reply via email to