在printf(“%。* s”)中使用指针的不同

用户名

我面临的问题与intptr_t数据类型有关,并且该方式fprintf()采用了%.*s格式的参数%.*s格式期望字段精度为type int,这本身并不是不合理的。

但是在这种情况下不是:

#include <stdio.h>
#include <stdint.h>
int main() {
    char fname[] = "Some_File.txt";
    FILE *write = fopen(fname,"w");
    
    if(write!=NULL){

        printf("\n\tType below :\n\n");
        char in[501]=""; char *p;

        while(1){
            fgets(in,MAX_LN,stdin);

    /*** Region with compiler warnings begins ***/
            if((p=strstr(in,"/end/"))!=0){
                intptr_t o = p-in;
                fprintf(write,"%.*s",o,in);
    /*** Region with compiler warnings ends ***/
                fclose(write);
                break;
            }
            else{
                fputs(in,write);
            }
        }
    }
}
  • 如果我对此进行编译,则无法与配合使用%.*s,编译器指出:

    警告:字段精度应为'int'类型,但参数的类型为'intptr_t'(aka'long')[-Wformat]

  • 如果我做到了int o;,它可以很好地运行,%.*s但是当然不是理想的,编译器会说很多:

    警告:隐式转换失去整数精度:“ long”到“ int” [-Wshorten-64-to-32]

现在,这是演示代码,这里o可以容纳的最大大小500,但是,在我的实际代码中,它可以是10,000甚至是100,000(仍然很大,仍然是32位int的大小,对吗?)

那么,如何最少的更改来最好地解决这个问题呢?

在Clang上编译(在GCC上可能非常相似)-Wall -Wextra -pedantic

chux-恢复莫妮卡

两个指针的区别是type ptrdiff_t“ ...是减去两个指针的结果的有符号整数类型;”

// intptr_t o = p-in;
ptrdiff_t o = p - in;

考虑到这两种观点char in[501],差异也适合int
简单地投。.*预期的匹配int,而不是一个intptr_t也没有ptrdiff_t

// fprintf(write,"%.*s",o,in);
fprintf(write,"%.*s", (int) o, in);

或一次全部:

fprintf(write,"%.*s", (int) (p - in), in);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

printf(“%s \ n”)输出与printf(“%s”)不同

来自分类Dev

在printf中使用。*

来自分类Dev

printf()修复指针问题

来自分类Dev

指针和printf

来自分类Dev

在printf中使用%p吗?

来自分类Dev

在/ bin / bash中使用的printf

来自分类Dev

在printf中使用%p吗?

来自分类Dev

在scanf和printf中使用%

来自分类Dev

在/ bin / bash中使用的printf

来自分类Dev

在替代中使用vim的printf

来自分类Dev

不同形式的printf

来自分类Dev

使用printf使用%d打印浮动指针

来自分类Dev

c printf(%* s)说明

来自分类Dev

使用printf格式的变量

来自分类Dev

使用Printf转义变量

来自分类Dev

Java使用printf的数组

来自分类Dev

使用printf输出变量

来自分类Dev

带数组指针的printf scanf

来自分类Dev

有关在printf函数中使用的未初始化的整数指针的行为的问题

来自分类Dev

将数组的指针传递给要在 C 中的 printf` 中使用的函数

来自分类Dev

sizeof指针与其用printf表示的形式不同?

来自分类Dev

sizeof指针与其用printf表示的形式不同吗?

来自分类Dev

在awk中使用printf取整

来自分类Dev

在printf中使用`operator const char *`

来自分类Dev

在C中使用printf打印空格数

来自分类Dev

在字符串中使用printf

来自分类Dev

如何在项目中使用Printf

来自分类Dev

在bash中使用printf转义连字符(-)

来自分类Dev

现在在我的输出中使用printf