【发布时间】:2009-07-16 09:37:33
【问题描述】:
我编写了这个简单的 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 浏览器的代码格式化程序在此站点上无法正常工作
【问题讨论】:
-
源代码的格式很混乱...发布代码,只需确保它缩进四个空格。
-
我已修复它,但修复已恢复,我认为这就是 Chrome“反馈”行所指的内容。奇怪的。修正版本在编辑历史中,请随时重新应用。 :)
-
小更新:初始名称中可以有数字,如果需要,我必须先检查两个下划线,然后再在最后一个下划线后面加上递增的数字