标签: printf

使用printf而不必转义双引号?

在C是不正常可以使用'的printf字符串.但是,我的文字充满双引号",我需要将它们全部转义为

printf("This is \"test\" for another \"text\"");
Run Code Online (Sandbox Code Playgroud)

是否有可能printf在没有逃脱的情况下".我的意思是使用另一个字符来包装字符串.

c printf

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

在Matlab中,如何在任意大的矩阵上执行fprintf命令

我正在使用matlab分析大型数据集.我希望能够在这个矩阵上运行fprintf命令行,它有大约22000列.所以,到目前为止我的想法是:

j=22;
for i = 1:j;
    fname = fopen(strcat('chr', num2str(i), '.out'), 'r');
    A = fscanf(fname, '%d', [1000,inf]);
    FIDW = fopen(strcat('chrproc', num2str(i), '.out'), 'w+');
    fprintf(FIDW, '%d\t%d\t%d\t%d\t%d\t%d\t\n', B);
end
Run Code Online (Sandbox Code Playgroud)

这个大小的22个文件将通过1-4行转换为矩阵.然而,棘手的部分(至少对我来说)是fprintf要求您提供FORMAT.因为这些文件太大,所以没有真正的方法输入%d\t.

也许fgetl命令更好?但fgetl不打印到文件,更重要的是,fgetl返回一个字符串,这对我来说效果不好.真的,像fscanf命令之类的东西会很棒,除了读取而不是打印...

非常感谢您的帮助和建议.

matlab printf scanf matrix

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

printf在打印浮点值时崩溃

printf()今天我遇到了一个奇怪的问题.但即使经过分析,我也找不到它的答案.因此在这里分享.我尝试了这三个printf()陈述:

printf("\nValue of this division is %f", (double)873/(double)65);
Run Code Online (Sandbox Code Playgroud)

它按预期打印正确的输出.

printf("\nSome message with an integer here %d followed by floats %f, %f, %f", 2013, 987/432, 873/65, 983/81);
Run Code Online (Sandbox Code Playgroud)

给我错误的值(因为我没有把它们加倍?)

printf("\nSome message with an integer here %d followed by floats %f, %f, %f and now string at end: %s", 2013, 987/432, 873/65, 983/81, "Some trial string here");
Run Code Online (Sandbox Code Playgroud)

printf()在这里坠毁了!这引起了两个问题:

  1. 我在MSDN中看到了"FormatOutput(LPCSTR formatstring,...)"示例,其中它们分配了固定宽度的目标缓冲区,然后vsnprintf()使用它进行调用.我相信printf()在同一条线上工作.但我没有找到任何内部缓冲区大小printf().如果它动态分配内存,那么它如何计算缓冲区大小?

  2. printf()在上面崩溃,因为vsnprintf()那里也崩溃了(是的,我尝试了上面参数FormatOutput给出的示例代码vsnprintf()).但为什么最终会崩溃呢?

c c++ printf

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

printf无法在屏幕上正确打印float/double

最近,我正在使用在MIPS架构上运行的特殊嵌入式操作系统.我不太了解它.当我使用printf函数时,看到一些奇怪的东西:

int a = 10;
float b = 3.14;
double c = 3.14;

printf("a is %d\n", a);           // I'm sorry I forgot to type the parameters just now
printf("b is %f\n", b);           //  Error
printf("c is %f\n", c);           //  Error
Run Code Online (Sandbox Code Playgroud)

输出是:

a is 10
b is 0.000000
Run Code Online (Sandbox Code Playgroud)

a是对的,但b似乎是错的,c甚至无法打印.函数printf来自newlib(一个C语言库).注意,可以正确计算浮点数/双数,正确存储在内存中,并且它们无法正确打印.

我认为操作系统可能有问题.我只是想知道可能是什么原因.有没有人以前遇到过这个问题?

c embedded printf operating-system mips

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

通过指针调用printf()

一切正常:

#include <stdio.h>

int (* func)(const char * fmt, ...);

int main()
{
  func = (void *)0x400420; /* printf pointer */
  printf("printf address: %p\n", printf);
  func("func() calling\n");
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用:

#include <stdio.h>

int (* func)(const char * fmt, ...);

int main()
{
  func = (void *)0x400420; /* printf pointer */
  /* printf("printf address: %p\n", printf); */
  func("func() calling\n");
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我做错了什么?请告诉我.我可以用它的指针调用printf(或其他一些函数)吗?

c printf pointers

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

这是将printf的输出设置为字符串的方法吗?

我需要将输出printf("%02X", buffer[0])放入字符串中.

理论上它将是这样的:

string str = printf("%02X", buffer[0]) +printf("%02X", buffer[1]) +printf("%02X", buffer[2]) +printf("%02X", buffer[3]);
Run Code Online (Sandbox Code Playgroud)

然而,这不起作用,我无法弄清楚如何做到这一点.

任何帮助表示赞赏,谢谢.

c++ printf

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

使用带有%s和char*的printf时出现问题

我在使用这一小段代码时遇到了一些问题:

int main(int argc, char **argv){
struct ether_addr *s, *d;

u_char dir1[] = {0x00,0x11,0x22,0x33,0x44,0x55};
u_char dir2[] = {0x66,0x77,0x88,0x99,0xaa,0xbb};

s = dir1;
d = dir2;

printf("Together: %s\t%s\n",ether_ntoa(s),ether_ntoa(d));

printf("Apart: %s\t",ether_ntoa(s));
printf("%s",ether_ntoa(d));}
Run Code Online (Sandbox Code Playgroud)

输出应该是相同的,但事实上,它是:

Together: 66:77:88:99:aa:bb 66:77:88:99:aa:bb
Apart: 0:11:22:33:44:55 66:77:88:99:aa:bb
Run Code Online (Sandbox Code Playgroud)

如果我将两个目录放在同一行,它只打印其中一个.为什么会这样?

c printf

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

格式'%s'需要'char*'类型的参数

为了在C中练习我的编程技巧,我试图自己编写strncpy函数.这样做我总是遇到错误,解决了大部分错误,最终我没有进一步的灵感继续下去.

我收到的错误是:

ex2-1.c:29:3: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat=]
   printf("The copied string is: %s.\n", stringb);
Run Code Online (Sandbox Code Playgroud)

问题是,这是一个非常常见的错误,并且它也已经在SO上描述,但我似乎无法应用其他人已经指出的提示.我知道在打印变量时我使用了错误的类型,当我使用%d格式时,它将返回一个整数,这可能是第一个字符的ASCII值,因为它在增加最大数字时不会改变要复制的字节数.

使用GDB我发现迭代通过while循环的b变量保持正确的字符串,但我似乎无法打印它.

我可能缺乏关于C语言的非常基本的知识部分而且我为这个新手问题(再一次)提出了道歉.如果您能提供反馈或指出我的代码中的其他缺陷,我将不胜感激.

#include <stdlib.h>
#include <stdio.h>

void strmycpy(char **a, char *b, int maxbytes) {
  int i = 0;
  char x = 0;

  while(i!=maxbytes) {
  x = a[0][i];
  b[i] = x;
  i++;
  }

  b[i] = 0;

}


int main (int argc, char **argv) {
  int maxbytes = atoi(argv[2]);
  //char stringa;
  char stringb;
  if (argc!=3 || …
Run Code Online (Sandbox Code Playgroud)

c string printf strcpy strncpy

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

Clang 5.0上的vsprintf和vsnprintf [-Wformat-nonliteral]警告

我有这一大块代码

static void err_doit(int errnoflag, int level, const char *fmt, va_list ap)
{
    int     errno_save;
    unsigned long n;
char    buf[MAXLINE];
    errno_save = errno;    
    #ifdef  HAVE_VSNPRINTF
vsnprintf(buf, sizeof(buf), fmt, ap);   /* this is safe */
    #else
vsprintf(buf ,fmt, ap);         /* this is not safe */
    #endif
n = strlen(buf);
if (errnoflag)
    snprintf(buf + n, sizeof(buf) - n, ": %s", strerror(errno_save));
strcat(buf, "\n");

if (daemon_proc) {
    syslog(level,"%s", buf);
} else {
    fflush(stdout);     
    fputs(buf, stderr);
    fflush(stderr);
}
return;
}
Run Code Online (Sandbox Code Playgroud)

当我编译它(Clang 5.0.0 with -Weverything)时,我获得了这些警告: …

c printf network-programming clang

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

如何修复fprintf漏洞?

在我的代码中,我使用了fprintf.我使用flawfinder检查代码是否存在漏洞,我得到了:

358:[4](格式)fprintf:如果格式字符串可能受到攻击者的影响,则可以利用它们.使用常量作为格式规范.

有人可以向我解释一下格式规范使用常量实际意味着什么吗?有安全版fprintf吗?

c c++ printf

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