在C中将增量整数添加到字符串的结尾

时间:2015-04-03 06:35:04

标签: c arrays printf

需要一些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;
}

3 个答案:

答案 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);