Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : compileerror "string constant"



Figapu
30-12-2004, 14:37
Es geht um diesen Code:


/* global include files */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <sys/types.h>

/* selfdefined include files */
#include "strfuncs.c"

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

DIR *dirp; /* directory pointer */
struct dirent *file; /* directory entry pointer */

/* 18 */ argv[1] = (strregcmp(argv[1], "^.*/{1,1}$") == 0)
/* 19 */ ? argv[1] : argv[1] . "/";

printf(">%s<\n\n\n", argv[1]);

if ((dirp = opendir(argv[1])) == NULL)
{

printf("Could not open directory %s", argv[1]);
return 1;

}

printf("Browsing directory %s\n\n", argv[1]);

while ((file = readdir(dirp)) != NULL)
{

if (strregcmp(file->d_name, "^[..]{1,2}$") == 0)
{

printf("%s%s\n", argv[1], file->d_name);

}

}

closedir(dirp);

return 1;

}


Ich kriege immer diesen Error:

test.c:18: error: parse error before string constant
Die Zeilen um die es geht hab ich mit der entsprechenden Zeilennummer versehen.

locus vivendi
30-12-2004, 15:28
In der mit 19 markierten Zeile ist der Punkt falsch. Strings konkatenieren geht anders. Mal die Funktionen aus string.h angucken wenn es unbeding C sein muss. Wenn du den C++ weg gehen willst kannst du mit dem operator + der std::string Klasse konkatenieren.

Figapu
30-12-2004, 16:17
Danke für den Tipp :)
So gehts:


if (strregcmp(argv[1], "^.*/{1,1}$") == 0)
strcat(argv[1], "/");

locus vivendi
30-12-2004, 16:39
So gehts:
Ich bin mir jetzt nicht 100%ig sicher, aber ich fürchte nicht. Das erste Argument von strcat muss nämlich auf genügend Speicher Zeigen um auch noch den zweiten als String aufzunehmen. Und ich glaube nicht das in argv[1] dafür dann genügend Speicher ist.

anda_skoa
03-01-2005, 16:14
Richtig.
Also am besten einen neuen Puffer anlegen der argv[1] + ein Zeichen aufnehmen kann und dann dorthin kopieren.
Zuerst argv[1] und dann entweder \0 oder '/' in die vorletzte Position schreiben und \0 dahinter.

Ciao,
_