需要一些sprintf的帮助。我继续遇到错误'sprintf'使得整数指针没有强制转换。
a在main函数中声明为char a [1000]
int
next_statement(char *a, int n) {
int c, i,z;
for (i=0; i < n && (c = getchar()) != EOF; i++) {
if (c == CHAR_SEMI) {
consume_char('\n');
break;
}
a[i] = c;
}
for(z=0; z<n;z++){
if (c == CHAR_SEMI) {
a[i-3] = 'x';
sprintf(a[i-2], "%d", z);
a[i-1] = ';';
a[i] = '\0';
return i; /* index when ; was read, so the length of saved. */
}
else if (i >= n) {
printf("%s Line too long.\n", ERROR_PREFIX);
exit(EXIT_FAILURE);
}
}
return 0;
}
答案 0 :(得分:4)
在这一行a[i-2]
是单个字符。它不代表字符指针。
sprintf(a[i-2], "%d", z);
所以你可以尝试这样,
sprintf(&a[i-2], "%d", z);
来自man
sprintf
页面
int sprintf(char *str, const char *format, ...);
它需要第一个参数作为字符指针。
答案 1 :(得分:3)
正如您所写,a[i-2]
表示char
,而不是char *
,正如sprintf()
所要求的那样,因为它是第一个参数。您需要提供字符串的指针才能写入。
[]
是数组下载运算符。您无需使用该运算符。所以,而不是
sprintf(a[i-2], "%d", z);
你可以使用
sprintf( (a+i-2), "%d", z);
答案 2 :(得分:2)
sprintf()将第一个参数作为char *
类型,但你在这里提到的是a[i-2]
字符类型,
所以你可以这样付出
sprintf( ((a+i)-2) ,"%d", z);