1

在我的 C 代码中,我得到以下字符串作为输入:

"c:\tc\bin\a c j k.jpg"

我尝试使用 scanf 读取输入,但失败了(通过带引号和不带引号的输入),我正在寻找其他解决方案。

我的代码如下:

char keytext[16],zzz,source[100],dest[100];
short int a;
size_t readcount;

clrscr();
printf("input the key text(max 16 characters):");
scanf("%s",&keytext);

printf("input file name:");
scanf("%s",&source);

/*fgets(source,100,stdin);
namelen=strlen(source);
if(source[namelen-1]=='\n')
source[namelen-1]='\0';*/

printf("output file name:");
scanf("%s",&dest);
4

2 回答 2

1

当遇到第一个空白字符时,格式说明符%s将停止使用输入,因此它只会读取到C:\tc\bin\a. 要阅读k.jpg您可以使用扫描集:

char input[128];
if (1 == scanf("%127[^\n]", input))
{
}

格式说明符"%127[^\n]"意味着读取到下一个换行符但不超过 127 个字符以防止缓冲区溢出。您应该在使用其输出之前检查 的返回值scanf(),它返回所做的分配数。

于 2012-09-02T08:00:18.320 回答
0

scanf带有%s说明符的函数需要指向 char的指针char *。但是您将指针传递给指向 char 的指针 char **。为了修复它,请改用以下代码:

scanf("%s", keytext);
scanf("%s", source);
scanf("%s", dest);

注意,它不需要&符号。如果要读取带有空格的整个字符串,可以使用fgets函数。

fgets(keytext, sizeof(keytext), stdin);
fgets(source,  sizeof(source),  stdin);
fgets(dest,    sizeof(dest),    stdin);
于 2012-09-02T08:00:05.870 回答