我有一个值为57.400002的浮点数.我用来sprintf_s在GUI上显示值.
sprintf_s(xPosition, 19, "%f", xPositionValue);
Run Code Online (Sandbox Code Playgroud)
如何格式化浮点数,使其显示为57.40?
我正在寻找一种方法来传递一个FILE *函数,以便函数可以写入它fprintf.如果我想让输出在磁盘上的实际文件中出现,这很容易.但我想要的是将所有输出作为字符串(char *).我喜欢的那种API是:
/** Create a FILE object that will direct writes into an in-memory buffer. */
FILE *open_string_buffer(void);
/** Get the combined string contents of a FILE created with open_string_buffer
(result will be allocated using malloc). */
char *get_string_buffer(FILE *buf);
/* Sample usage. */
FILE *buf;
buf = open_string_buffer();
do_some_stuff(buf); /* do_some_stuff will use fprintf to write to buf */
char *str = get_string_buffer(buf);
fclose(buf);
free(str);
Run Code Online (Sandbox Code Playgroud)
在glibc的头似乎表明,一个文件可能被设置了挂钩函数来执行实际的读写.在我的情况下,我想我希望写钩子将字符串的副本附加到链表,并且有一个get_string_buffer函数可以计算出列表的总长度,为它分配内存,然后将每个项目复制到它在正确的地方.
我的目标是可以传递给函数的东西,比如do_some_stuff …
我在头文件中定义了一个结构,如下所示:
#define LC_ERR_LEN 300
typedef struct dLC_ERRMSG {
short nr;
short strategy;
char tx[LC_ERR_LEN];
} LC_ERRMSG;
Run Code Online (Sandbox Code Playgroud)
我在我的代码中使用的是:
LC_ERRMSG err;
char *szError;
szError = strerror(sStatus);
snprintf(err.tx,LC_ERR_LEN," %s - %s",szFilename,szError);
/* do something with our error string */
Run Code Online (Sandbox Code Playgroud)
这样可行.但是,如果我LC_ERRMSG err;全局声明- 即在使用它的函数之外,或者甚至extern LC_ERRMSG err;(这是我的初衷,因为我希望能够在中心位置读出错误状态),snprintf调用的代码段错误.
你能告诉我任何线索吗?
ddd告诉我,当全局声明时,内存被初始化为全零,或者在声明为extern时至少初始化和可读.值szFilename,szError和LC_ERR_LEN都是正确且有意义的.
基于"IEEE"规范:"当输入或结果是NaN时,该标准不解释NaN的符号." 然而,printf版画NaN值签署:nan或-nan
(?从SPEC)有人点我的一套规则时nan,当-nan印刷例如,我检查了printf(-1.0f)打印-nan
谢谢
我有字符向量,我想确保向量的所有元素具有相同的长度.因此我用空格填充短元素,如下所示:
vec <- c("fjdlksa01dada","rau","sjklf")
x <- sprintf("%-15s", vec)
nchar(x)
# returns
[1] 15 15 15
Run Code Online (Sandbox Code Playgroud)
喜欢上一个问题的答案.这很好,但它似乎与变音符号有问题.例如,如果我的矢量看起来像这样:
vec2 <- c("fjdlksa01dada","rauü","sjklf")
y <- sprintf("%-15s", vec)
nchar(y)
# returns
[1] 15 14 15
Run Code Online (Sandbox Code Playgroud)
我在Mac OS X上运行R(10.6).我怎样才能解决这个问题?
编辑:注意,我不打算修复nchar的输出,因为它是正确的.问题是sprintf失去了变形金刚.
编辑:更新R,更改为DWins区域设置 - 完全没有变化.但:
vec2 <- c("fjdlksa01dada","rauü","sjklf")
Encoding(vec2)
# returns
[1] "unknown" "UTF-8" "unknown"
Run Code Online (Sandbox Code Playgroud)
奇怪.
我用一个程序写pthread.
环境:windows 7,CYGWIN_NT-6.1 i686 Cygwin,gcc(GCC)4.5.3
源代码
#include<stdio.h>
#include<pthread.h>
void *th_func(void *p)
{
int iLoop = 0;
for(iLoop = 0;iLoop<100;iLoop++)
{
printf("Thread Thread Thread Thread\n");
}
return;
}
int main()
{
int iLoop = 0;
pthread_t QueThread;
printf("Main : Start Main\n");
printf("Main : Start Create Thread\n");
pthread_create(&QueThread,NULL,th_func,NULL);
printf("Main : End Create Thread\n");
for(iLoop = 0;iLoop<100;iLoop++)
{
printf("Main Main Main Main\n");
}
pthread_join(QueThread,NULL);
printf("Main : End Main\n");
printf("---------------\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我编译源代码时,没有警告或错误,但它的输出很奇怪.
它的一部分输出
Main : Start Main
Main : Start …Run Code Online (Sandbox Code Playgroud) 对于存储在x中的double值,缓冲区需要在下面的函数调用中有多大?
sprintf(buffer, "%.*g", DBL_DIG, x);
Run Code Online (Sandbox Code Playgroud) 如何在printf中以粗体显示输出?"[1m testing bold"什么都不做
String format = "%-20s %-15s %-20s %-15s %-10s";
System.out.printf(format, "Name", "Group_name", "Java_Prof_Level", "Cpr_Nr", "Gender", "[1m testing bold");
Run Code Online (Sandbox Code Playgroud)