标签: format-specifiers

将short int复制到char数组

我有一个名为s_int的短整数变量,它保存value = 2

unsighed short s_int = 2;
Run Code Online (Sandbox Code Playgroud)

我想将这个数字复制到char数组到char数组的第一个和第二个位置.

让我们说我们有char buffer[10];.我们希望将两个字节s_int复制到buffer[0]buffer[1].

我该怎么做?

c c++ format-specifiers

3
推荐指数
2
解决办法
3万
查看次数

C中十六进制字符的格式说明符

sprintf在C中是否有一个格式说明符,它将a映射char到十六进制的方式与%x映射int到十六进制的方式相同?

c hex format-specifiers

3
推荐指数
2
解决办法
2万
查看次数

scanf和p转换说明符

在C11规范中说参数类型%p必须是void **scanf()函数的情况下,但我无法想象如何输入一个地址并将其存储到一个void **.事实上,如果我试图做:

void **p;
scanf("%p", p);
Run Code Online (Sandbox Code Playgroud)

我遇到了分段错误.

PS C11规格:

相应的参数应该是指向void的指针

c format-specifiers c11

3
推荐指数
1
解决办法
1524
查看次数

Format指定类型"unsigned long"但参数的类型为"int"

Format指定类型"unsigned long"但参数的类型为"int"

我在XCode中得到此错误,无论我放入什么格式说明符,或者如果我更改为NSInteger,NSUInteger,long或int,仍然会出错!?我怎样才能解决这个问题?

-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
Run Code Online (Sandbox Code Playgroud)

{

我有这些行,第2行是@"%lu"的错误,(行%max)

NSUInteger max = (NSInteger)[self.calendar maximumRangeOfUnit:NSCalendarUnitHour].length;
[lblDate setText:[NSString stringWithFormat:@"%lu",(row % max)]]; 
lblDate.textAlignment = NSTextAlignmentRight;
Run Code Online (Sandbox Code Playgroud)

感谢帮助 !

objective-c format-specifiers ios

3
推荐指数
1
解决办法
5500
查看次数

警告:格式'%x'需要'unsigned int'类型的参数

当我尝试编译这个时,我得到以下错误,不知道为什么......

警告:格式'%x'需要'unsigned int'类型的参数,但参数2的类型为'char*'[-Wformat =]

printf("Name buffer address:    %x\n", buffer);
Run Code Online (Sandbox Code Playgroud)

代码:

#include <string.h>
#include <stdio.h>

main(){
        char name[200];
        printf("What is your name?\n");
        scanf("%s", name);
        bo(name, "uname -a");
}

int bo(char *name, char *cmd){
        char c[40];
        char buffer[40];
        printf("Name buffer address:    %x\n", buffer);
        printf("Command buffer address: %x\n", c);
        strcpy(c, cmd);
        strcpy(buffer, name);
        printf("Goodbye, %s!\n", buffer);
        printf("Executing command: %s\n", c);
        fflush(stdout);
        system(c);
}
Run Code Online (Sandbox Code Playgroud)

c printf format-specifiers

3
推荐指数
2
解决办法
1万
查看次数

Linux:打印指定长度的零填充字符串

在Linux上,我正在使用GNU gcc 4.9.2版本,并在尝试打印指定长度的零填充字符串时出现奇怪的意外行为.这是我正在尝试的代码段:

#include <cstdio>
#include <cstring>
int main()
{
  char buff[5];
  sprintf(buff,"%04s","12");
  printf("%s\n", buff);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

虽然http://www.cplusplus.com/reference/cstdio/printf/中给出的文档清楚地指出,当指定填充时,标志左边用数字填充(0)而不是空格.但是,它的打印空间填充"12"即"12"而不是"0012".补救?

c format-specifiers

3
推荐指数
1
解决办法
225
查看次数

scanf() 的宽度说明符 - 要使用的字符长度在编译时不固定,仅在运行时确定。怎么让它变呢?

我想将字段宽度说明符应用于 scanf() 操作以读取字符串,因为明确指定要读取/使用的字符数量,并且不会使 -scanf()操作容易导致缓冲区溢出。除了目标参数指向一个已经匹配的char数组,该数组与元素的大小完全相同,字段宽度的所需值必须是,+ 1 表示\0. 这个char数组的大小也是在运行时之前确定的。

现在的问题是最大字段宽度的值无法固定;它仅在运行时确定。

我如何实现,能够在运行时确定最大字段宽度的值?


我做了一些研究,发现在 Stackoverflow 上已经有一个问题,在它的来源中,解决了与我完全相同的问题。scanf() 可变长度说明符

但不幸的是,在问题的发展以及答案的内部,解决方案只能使用预处理器指令宏处理,这意味着字段宽度的值实际上并不是那个变量,它在编译时是固定的-时间。


我有一个例子给你我的意思:

#include <stdio.h>

int main(void)
{
    int nr_of_elements;

    printf("How many characters your input string has?\n");
    scanf("%d",&nr_of_elements);

    nr_of_elements++;                          //+1 element for the NULL-terminator.

    char array[nr_of_elements];

    printf("Please input your string (without withspace characters): ");
    scanf("%s",array);        // <--- Here i want to use a field width specifier.      

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想做的是这样的:

scanf("%(nr_of_elements)s");
Run Code Online (Sandbox Code Playgroud)

或者,如果我遵循链接问题中答案的编程风格:

scanf("%" "nr_of_elements" "s");
Run Code Online (Sandbox Code Playgroud)
  1. 有没有办法使scanf()-function内的最大字段宽度取决于由运行时确定或生成的值?

  2. 有没有替代方法可以实现相同的目标? …

c c++ runtime scanf format-specifiers

3
推荐指数
1
解决办法
893
查看次数

“大多数 C 系统提供逻辑上无限的浮动值”是什么意思?

最初我将变量 x 和 y 声明为 int 类型:

#include<stdio.h>   

     int main(){
        int x, y = 0 ;
        x = 1 / y;
        printf("%d", x);

        return 0;    
    }
Run Code Online (Sandbox Code Playgroud)

程序崩溃(原因很明显)。

现在我将变量 x 和 y 声明为 double:

#include<stdio.h>   

 int main(){
    double x, y = 0 ;
    x = 1 / y;
    printf("%d", x);

    return 0;    
}
Run Code Online (Sandbox Code Playgroud)

但是输出:0。(为什么?)

然后我在 printf 中将 %d 更改为 %f:

#include<stdio.h>   

 int main(){
    double x, y = 0 ;
    x = 1 / y;
    printf("%f", x);

    return 0;    
}
Run Code Online (Sandbox Code Playgroud)

输出:1.#INF00

我不明白这里发生了什么。 …

c precision divide-by-zero format-specifiers

3
推荐指数
1
解决办法
71
查看次数

格式说明符 %[^\n]s 在 C89 中合法吗?

我正在使用 scanf 从 sdin 读取字符串:

scanf("%[^\n]s", msg);
Run Code Online (Sandbox Code Playgroud)

%[^\n]s读取直到找到新行字符。这在 ANSI-C 中合法吗?

c scanf c89 format-specifiers ansi-c

3
推荐指数
2
解决办法
165
查看次数

在printf的格式字符串中使用%lu是否有效,其中PRIu32是预期的?

例如,假设我有一个i类型的变量uint32_t.打印它的预期方式是这样的:

printf("%"PRIu32"\n", i);
Run Code Online (Sandbox Code Playgroud)

但是,应该注意,要求long unsigned int至少32位宽.正确的说明符long unsigned int%lu.因此,上述陈述可以替换为:

printf("%lu\n", i);
Run Code Online (Sandbox Code Playgroud)

我想是的,因为我没有理由不这样做.但是,如果是,那么这将消除对PRIu32这些宏化说明符的存在的需要,所以我想我最好问一下.

我问它的原因是我想printf动态创建一个格式字符串,如果我不知道字符串的大小PRIu32扩展为(以及是否sizeof(PRIu32)是否有效可能值得一个单独的问题).

在任何情况下,我认为它应该是有效的写:

printf("%lu\n", (long unsigned)i);
Run Code Online (Sandbox Code Playgroud)

c int format-specifiers

2
推荐指数
1
解决办法
1298
查看次数

标签 统计

format-specifiers ×10

c ×9

c++ ×2

scanf ×2

ansi-c ×1

c11 ×1

c89 ×1

divide-by-zero ×1

hex ×1

int ×1

ios ×1

objective-c ×1

precision ×1

printf ×1

runtime ×1