我有一个bash shell脚本,其中包含以下行:
g=$(/bin/printf ${i})
Run Code Online (Sandbox Code Playgroud)
当${i}包含类似的东西时-6,printf认为它被传递了一个选项.它无法识别该选项,因此会产生错误.
如果用${i}引号括起来,printf仍然认为它被传递了一个选项.
g=$(/bin/printf "${i}")
Run Code Online (Sandbox Code Playgroud)
如果我转义引号,变量$g则保持" -6",这不是我想要的.
g=$(/bin/printf \"${i}\")
Run Code Online (Sandbox Code Playgroud)
有没有逃脱破折号( - ).
printf是一个BusyBox应用程序
0xC0000005:访问冲突读取位置0xcccccccc.
printf抛出此异常.
我不知道为什么会发生这种情况......这些字符串变量中有值.我使用printf错了吗?
救命!(请看开关盒)
string header;
string body;
string key;
if (!contactList.isEmpty()) {
cout << "Enter contact's name: ";
getline(cin, key);
Contact * tempContact = contactList.get(key);
if (tempContact != NULL) {
string name = tempContact->getName();
string number = tempContact->getNumber();
string email = tempContact->getEmail();
string address = tempContact->getAddress();
//I've just put this here just to test if the variables are being initialized
cout << name + " " + number + " " + email + " " + address << …Run Code Online (Sandbox Code Playgroud) 我正在用C编写一个程序,它将随机的十六进制值打印到文本文件中.打印值具有回车(CR)和换行(LF).但是,CR(在记事本++中可见)在使用文件时会导致问题.有没有办法打印一个只有LF和没有CR的新行.
这是代码:
#include <stdio.h>
#include <stdlib.h>
void main(){
int hexa_address, numberofAddress;
char tracefile[50]; //name of file
int seq_or_rand; //1 for random address; 2 for sequential address
srand(time(NULL)); //reset the value of the random
printf("This generator generates 32bits hexadecimal.\n\n");
printf("Name of file: ");
scanf("%s", tracefile);
printf("Random (1) or Sequential (2): ");
scanf("%d", &seq_or_rand);
FILE *file;
file = fopen(tracefile,"w"); // create file
if(seq_or_rand == 1){ //random generator
file = fopen(tracefile,"w"); // create file
for(numberofAddress = 0; numberofAddress<10000;numberofAddress++){ //create 10000 address
//if(numberofAddress!=0)
fprintf(file, …Run Code Online (Sandbox Code Playgroud) 所以我试图在C中打印出一个字符串,当我打印出来时,我总是在字符串的末尾获得额外的字符.代码:
char binaryNumber[16] = "1111000011110000";
printf("binary integer: %s\n", binaryNumber);
Run Code Online (Sandbox Code Playgroud)
输出:
二进制整数:1111000011110000▒▒▒▒
你能帮我弄清楚为什么会这样吗?我认为这是我的代码中其他一些问题的根源.在我以更复杂的方式创建字符串之前我遇到了这个问题,并且在这种情况下也获得了额外的字符,但它们是不同的.所以我用最基本的方法制作了一个字符串(这里显示的方法),我仍然遇到问题
我想通过usart从stm32f405注销.在我的syscall.c文件中,我实现了通过usart打印的功能:
int _write(int file, char *ptr, int len)
{
int todo;
for (todo = 0; todo < len; todo++)
{
usart_send_char( *ptr++ );
}
return len;
}
Run Code Online (Sandbox Code Playgroud)
功能usart_send_char( *ptr++ );按预期工作.但是当我打电话时:
printf("%s, %d, %3.2f\r\n", "asd", 777, 13.2 );
Run Code Online (Sandbox Code Playgroud)
我得到:
asd, 777, 0.00
浮动变量未正确打印.
Makefile文件:
PROCESSOR = -mcpu=cortex-m4 -mthumb -mfloat-abi=softfp -mfpu=fpv4-sp-d16
CFLAGS += $(PROCESSOR) $(INCLUDES) $(STFLAGS) -Wall -fno-strict-aliasing $(C_PROFILE)
LDFLAGS = $(PROCESSOR) -Wl,-Map=$(PROG).map,--cref,--gc-sections
Run Code Online (Sandbox Code Playgroud)
二手compilator:
Sourcery CodeBench Lite 2014.05-28
Run Code Online (Sandbox Code Playgroud)
哪里弄错了?
在我的C++代码中经常使用以下类型的辅助函数:
static inline std::string stringf(const char *fmt, ...)
{
std::string ret;
// Deal with varargs
va_list args;
va_start(args, fmt);
// Resize our string based on the arguments
ret.resize(vsnprintf(0, 0, fmt, args));
// End the varargs and restart because vsnprintf mucked up our args
va_end(args);
va_start(args, fmt);
// Fill the string
if(!ret.empty())
{
vsnprintf(&ret.front(), ret.size() + 1, fmt, args);
}
// End of variadic section
va_end(args);
// Return the string
return ret;
}
Run Code Online (Sandbox Code Playgroud)
它有一些上升空间:
现在,我有一些问题:
巧合的是,我发现,它disp(fprintf())打印了fprintf的字符串加上它有的字符数.我知道,这disp()是简化的,但只是出于纯粹的好奇心,我想知道,为什么它打印字符的数量,因为这可能实际上有用的一天.
例如
disp(fprintf('Hi %i all of you',2))
Run Code Online (Sandbox Code Playgroud)
结果是
嗨,你们所有人15
我想做这样的事情:
char sLength[SIZE_T_LEN];
sprintf(sLength, "%zu", strlen(sSomeString));
Run Code Online (Sandbox Code Playgroud)
也就是说,我想在缓冲区中打印一个类型的值size_t.问题是:应该是什么价值SIZE_T_LEN?关键是要知道所需的最小尺寸,以确保永远不会发生溢出.
我有一个代码打算在字符串后打印一些空格(以删除最终可能在这里的内容,因为我正在移动光标).
所以,我使用了这样的东西:
int some_length = 0;
char some_string[]="hello world";
printf( "%*c%s\n", some_length, ' ', some_string );
Run Code Online (Sandbox Code Playgroud)
我认为它会产生"hello world",但不会产生"hello world"(请注意,在我的真实代码中,空格是在字符串之后打印的,因为目标是擦除,而不是缩进,我只是这样做有工作样本).
那么,这种行为是有意的吗?由于some_length是0,人们可以合理地希望什么都不打印,对吗?这是一个未定义的行为,或者它可能是一个但是在标准库中(我怀疑它,但是......)?
我有一个函数返回给定两个日期的句点的字符串表示,但我希望用户能够控制格式.为此,我正在使用sprintf并且调用者传入格式字符串,使调用者可以灵活地使用以下内容:
> sprintf("from %s - %s","Mon 21","Sun 27")
[1] "from Mon 21 - Sun 27"
Run Code Online (Sandbox Code Playgroud)
要么
> sprintf("%s - %s inclusive","Mon 21","Sun 27")
[1] "Mon 21 - Sun 27 inclusive"
Run Code Online (Sandbox Code Playgroud)
我发现如果格式字符串中没有足够的%标记,那么无关紧要,所以你可以这样做:
> sprintf("week begin %s","Mon 21","Sun 27")
[1] "week begin Mon 21"
Run Code Online (Sandbox Code Playgroud)
但我找不到一种方法来构造一个格式字符串,该字符串删除第一个参数并返回"周末Sun 27".注意我真的想要一个只改变格式字符串的解决方案,或者知道这是不可能的......
我尝试了一些技巧,比如制作第一个格式0宽度%0s但没有喜悦:
> sprintf("%0s week ending %s","Mon 21","Sun 27")
[1] "Mon 21 week ending Sun 27"
Run Code Online (Sandbox Code Playgroud)
显然,我可以通过让调用者说出格式是否使用开始日期和/或结束日期,但是如果有一种方法可以使用sprintf格式字符串来完成这项工作.