我有一个名为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].
我该怎么做?
sprintf在C中是否有一个格式说明符,它将a映射char到十六进制的方式与%x映射int到十六进制的方式相同?
在C11规范中说参数类型%p必须是void **在scanf()函数的情况下,但我无法想象如何输入一个地址并将其存储到一个void **.事实上,如果我试图做:
void **p;
scanf("%p", p);
Run Code Online (Sandbox Code Playgroud)
我遇到了分段错误.
PS C11规格:
相应的参数应该是指向void的指针
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)
感谢帮助 !
当我尝试编译这个时,我得到以下错误,不知道为什么......
警告:格式'%x'需要'unsigned int'类型的参数,但参数2的类型为'char*'[-Wformat =]
Run Code Online (Sandbox Code Playgroud)printf("Name buffer address: %x\n", buffer);
代码:
#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) 在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".补救?
我想将字段宽度说明符应用于 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)
有没有办法使scanf()-function内的最大字段宽度取决于由运行时确定或生成的值?
有没有替代方法可以实现相同的目标? …
最初我将变量 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
我不明白这里发生了什么。 …
我正在使用 scanf 从 sdin 读取字符串:
scanf("%[^\n]s", msg);
Run Code Online (Sandbox Code Playgroud)
%[^\n]s读取直到找到新行字符。这在 ANSI-C 中合法吗?
例如,假设我有一个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)