Я написал эту простую программу на C, которая меняет имя файла ротации.
Например: для A_B_C_1
нужно повернуть его до A_B_C_2
, а если A_B_C
нужно повернуть до A_B_C_1
Проблема в том, что strncat
не работает должным образом. Это дает мне вывод как:
A_B_C_1 (Works fine for single instance)
A_B_C_2
A_B_C_23
A_B_C_2324
Используемая логика проста:
- получить последнюю цифру в строке, если она существует.
- Если он не просто добавляет _1 (этот работает нормально)
- Если это так - извлеките число, увеличьте его и добавьте к новой строке.
Есть какая-нибудь стандартная библиотека, которая делает это?
Дает ошибку при вызове этого метода в цикле / несколько раз ....
Я не могу отладить причину ..... Нужна помощь по этому вопросу, пожалуйста, руководство.
int getRotationFileName(char *sFileName,char *sNewFileName)
{
char sTmpFile[256];
int newRotation;
memset(sTmpFile,NULL,sizeof(sTmpFile));
strncpy(sTmpFile, sFileName, strlen(sFileName));
char *tokenPtr;
strtok(sFileName,"_"); //a
strtok(NULL, "_"); //b
strtok(NULL, "_"); //c
tokenPtr = strtok(NULL, "_"); //1
printf("sTempFile [%s], sFileName [%s], token [%s]",
sTmpFile,sFileName,tokenPtr);
if(tokenPtr!= NULL)//Last - exists
{
newRotation = atoi(tokenPtr);
int newLen = strlen(sTmpFile);
int oneLen = strlen(tokenPtr);
memset(sNewFileName, NULL, sizeof(sNewFileName));
printf("sNewFileName is prior: %s and len is %d \n",
sNewFileName, (newLen-oneLen));
printf("sTempName is prior: %s", sTmpFile);
strncpy(sNewFileName,sTmpFile, (newLen-oneLen));
printf("diff is %d\n", (newLen-oneLen));
printf("sNewFileName before concat %s \n", sNewFileName);
newRotation++;
sprintf(sNewFileName,"%s%d",sNewFileName, newRotation);
sNewFileName[strlen(sNewFileName)]='\0';
printf("sNewFileName after concat %s \n", sNewFileName);
}
else
{
printf("in else TmpFile [%s] , New File [%s], len %d",sTmpFile,
sNewFileName,strlen(sTmpFile));
strcat(sTmpFile,"_1");
strncpy(sNewFileName,sTmpFile, strlen(sTmpFile));
}
strcpy(sFileName, sNewFileName);
printf("\nNew file created is %s\n",sNewFileName);
return 1;
}
Кажется, что проблема в линии: strncpy (sNewFileName, sTmpFile, (newLen-oneLen));
Обратная связь: Форматировщик кода на этом сайте работает неправильно для браузера Chrome