printf在C中使用时,如何逃避%符号?
printf("hello\%"); /* not like this */
Run Code Online (Sandbox Code Playgroud) 我想size_t在C中打印出一个类型的变量,但似乎size_t在不同的体系结构上别名为不同的变量类型.例如,在一台计算机(64位)上,以下代码不会抛出任何警告:
size_t size = 1;
printf("the size is %ld", size);
Run Code Online (Sandbox Code Playgroud)
但在我的另一台机器(32位)上面的代码会产生以下警告消息:
警告:格式'%ld'需要类型'long int*',但参数3的类型为'size_t*'
我怀疑这是由于指针大小的不同,所以在我的64位机器size_t上别名为a long int("%ld"),而在我的32位机器size_t上别名为另一种类型.
是否有专门用于的格式说明符size_t?
c size-t platform-independent format-specifiers format-string
我正在阅读代码中的漏洞,并遇到了这个Format-String漏洞.
维基百科说:
当程序员希望打印包含用户提供的数据的字符串时,最常出现格式化字符串错误.程序员可能会错误地写printf(缓冲区)而不是printf("%s",缓冲区).第一个版本将缓冲区解释为格式字符串,并解析它可能包含的任何格式化指令.第二个版本只是按照程序员的意图将字符串打印到屏幕上.
我遇到了printf(缓冲区)版本的问题,但我仍然没有得到攻击者如何使用此漏洞来执行有害代码.有人可以告诉我一个例子如何利用这个漏洞?
我想格式化一个整数作为百分率,而没有如图它乘以100 在这里.因为我的源是一个int,所以先将它除以100不是一个有效的选项.这可能吗?
[DisplayFormat(DataFormatString = "{0:#%}")]
Run Code Online (Sandbox Code Playgroud) 例子:
"Something %d" and "Something else %d" // Compatible
"Something %d" and "Something else %f" // Not Compatible
"Something %d" and "Something %d else %d" // Not Compatible
"Something %d and %f" and "Something %2$f and %1$d" // Compatible
Run Code Online (Sandbox Code Playgroud)
我认为应该有一些C功能,但我没有得到任何相关的搜索结果.我的意思是编译器正在检查格式字符串和参数是否匹配,因此已经编写了用于检查它的代码.唯一的问题是我怎么称呼它.
我正在使用Objective-C,所以如果有一个Objective-C特定的解决方案也没关系.
我正在使用NSLog()打印一些由NSString和相关整数组成的表格数据.
假设我知道最长单词的长度.
有没有办法使用格式字符串来获得这种列对齐:
Run Code Online (Sandbox Code Playgroud)word:tree rank:5 word:frog rank:3 word:house rank:2 word:peppercorn rank:2 word:sword rank:2 word:antlion rank:1
我之所以要问格式化字符串是因为我希望能够以轻量级方式格式化我的ghetto调试输出.
这是我尝试过的:
NSString *word = @"tree";
NSUInteger rank = 4;
NSString *str = [NSString stringWithFormat:@"word:%-20@ rank:%u", word, rank];
NSLog(@"%@", str);
Run Code Online (Sandbox Code Playgroud)
结果:
字:树等级:4
完全没有效果.
例如,我想用方法实现类
public class Logger {
public void info(String message, String[] params) {
}
}
Run Code Online (Sandbox Code Playgroud)
如果是输入
new Logger().info("Info: param1 is ? , param2 is ?", new String[] {"a", "b"});
Run Code Online (Sandbox Code Playgroud)
输出必须是
Info: param1 is a , param2 is b
Run Code Online (Sandbox Code Playgroud)
实现它的最简单方法是什么?
我想在jqplot中有一个工具提示悬停突出显示的东西.问题是我希望它在轴上提供更多细节.因此格式化程序应该是不同的.我无法显示秒数:
有一个JS FIDLE 这里!
我希望时间戳显示为小时:分钟:秒,这将是格式字符串'%H:%M:%S'或'%T'或'%X'.但是我该怎么做?
highlighter: {
show: true,
sizeAdjust: 3,
//useAxesFormatters: false,
//tooltipFormatString: '%H:%M:%S',
formatString: '<table class="jqplot-highlighter"><tr><td>tijd:</td><td>%s</td></tr><tr><td>snelheid:</td><td>%s</td></tr></table>',
},
Run Code Online (Sandbox Code Playgroud) 我正在与一个非常古老的系统连接,我需要生成的文件需要一个由字符串组成的字段,但需要正好是15个宽度.
我想要这样的东西:
val companyName = "FooBar, Inc" // 11 chars
f"$companyName%s"
Run Code Online (Sandbox Code Playgroud)
回来:
" FooBar, Inc"
Run Code Online (Sandbox Code Playgroud)
是否有一种灵巧的方式来做我正在尝试使用字符串插值?
我为每个人写了一个小问题的例子,看看使用Python 2.7和Django 1.10.8会发生什么
# -*- coding: utf-8 -*-
from __future__ import absolute_import, division, unicode_literals, print_function
import time
from django import setup
setup()
from django.contrib.auth.models import Group
group = Group(name='schön')
print(type(repr(group)))
print(type(str(group)))
print(type(unicode(group)))
print(group)
print(repr(group))
print(str(group))
print(unicode(group))
time.sleep(1.0)
print('%s' % group)
print('%r' % group) # fails
print('%s' % [group]) # fails
print('%r' % [group]) # fails
Run Code Online (Sandbox Code Playgroud)
退出时带有以下输出+回溯
$ python .PyCharmCE2017.2/config/scratches/scratch.py
<type 'str'>
<type 'str'>
<type 'unicode'>
schön
<Group: schön>
schön
schön
schön
Traceback (most recent call last):
File "/home/srkunze/.PyCharmCE2017.2/config/scratches/scratch.py", line 22, …Run Code Online (Sandbox Code Playgroud) format-string ×10
c ×4
objective-c ×2
printf ×2
c# ×1
django ×1
hover ×1
java ×1
jqplot ×1
logging ×1
padding ×1
parameters ×1
python ×1
scala ×1
scala-2.10 ×1
security ×1
size-t ×1
string ×1
tooltip ×1