标签: printf

字符串上的"printf"打印出乱码

我正在尝试按以下方式打印字符串:

int main(){
    string s("bla");
    printf("%s \n", s);
         .......
}
Run Code Online (Sandbox Code Playgroud)

但我得到的只是随机的胡言乱语.

你能解释一下原因吗?

c++ string printf

14
推荐指数
2
解决办法
2万
查看次数

如何使用printf为64位Mac OS X编写汇编语言hello world程序?

我正在努力学习为64位Mac OS编写汇编语言.我对32位Mac OS以及32位和64位Linux没有任何问题.

但是,Mac OS 64位是不同的,我无法弄清楚.因此,我在这里寻求帮助.

我没有使用系统调用打印的问题.但是,我想学习如何使用Mac OS的64位汇编语言调用C函数.

请查看以下代码

.data
_hello:
    .asciz "Hello, world\n"


.text
.globl _main
_main:
    movq $0, %rax
    movq _hello(%rip), %rdi
    call _printf
Run Code Online (Sandbox Code Playgroud)

我使用$ gcc -arch x86_64 hello.s

组装和链接.

它生成二进制代码.但是,运行它时出现了分段错误.

我在调用_printf之前尝试添加"subq $ 8,%rsp",仍然和以前一样.

我做错了什么?

顺便说一下,这是在Mac上调试此代码的任何方法吗?我尝试添加-ggdb或-gstab或-gDWARF和$ gdb ./a.out,但无法查看代码并设置断点.

macos 64-bit assembly printf 32bit-64bit

14
推荐指数
1
解决办法
8977
查看次数

MinGW GCC:"未知的转换类型字符'h'"(snprintf)

好吧,我遇到了一个奇怪的问题,在Windows 7上使用MinGW(GCC 4.6.2)编译C文件.该文件包含以下C代码:

#include <stdio.h>

int main(int argc, char *argv[]) {
    printf("%2hhX\n", 250);
    char c[80];
    snprintf(c, sizeof(c), "%2hhX", 250);
    printf("%s\n", c);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译结果如下:

$ gcc.exe -std=c99 -pedantic -Wall test.c
test.c: In function 'main':
test.c:6:2: warning: unknown conversion type character 'h' in format [-Wformat]
test.c:6:2: warning: too many arguments for format [-Wformat-extra-args]
Run Code Online (Sandbox Code Playgroud)

现在,对我来说很奇怪的是,它抱怨snprintf第6行的电话,而不是第printf4行的电话.我错过了什么或警告是不正确的?另外,格式字符串可能有更好的等价物"%2hhX"吗?(我正在尝试将char变量打印为十六进制值.)

c printf gcc mingw

14
推荐指数
1
解决办法
5522
查看次数

printf比std :: cout快5倍多?

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <ctime>

int main(int argc, char* argv[])
{
    std::clock_t start;
    double duration;    

    std::cout << "Starting std::cout test." << std::endl;
    start = std::clock();

    for (int i = 0; i < 1000; i++)
    {
        std::cout << "Hello, World! (" << i << ")" << std::endl;
    }

    duration = (std::clock() - start) / (double) CLOCKS_PER_SEC;

    std::cout << "Ending std::cout test." << std::endl;
    std::cout << "Time taken: " << duration << std::endl;

    std::system("pause");

    std::cout << "Starting std::printf test." …
Run Code Online (Sandbox Code Playgroud)

c++ performance printf cout

14
推荐指数
2
解决办法
1万
查看次数

为什么printf圆形浮点数?

我正在尝试使用打印一些浮点数printf.例如:

int main()
{
    printf("%.1f",76.75); 
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:76.8

我对结果有一些疑问.

首先,为什么不打印76.7?

第二,它是如何围绕这个数字的呢?

c floating-point printf

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

堆栈变量...已损坏

我有一个简单的函数,可以将一些数据写入新文件.它工作正常,文件已写入,但在MSVS Express 2013中调试时出现上述错误.

void writeSpecToFile(const char *fname); //in header file.

char myChar [20];
sprintf(myChar, "aa%03daa%daa", i1, i2);
const char* new_char = myChar;
writeSpecToFile(myChar);
Run Code Online (Sandbox Code Playgroud)

如图所示,我只是使用sprintf将一些变量插入到字符串中(工作正常).现在,无论我是通过myChar还是new_char,它仍然会给我带来损坏错误.

什么地方出了错?

c++ stack printf

14
推荐指数
2
解决办法
5万
查看次数

可以使用%s打印最大字符串大小?

使用%sc语言可以打印的最大尺寸是多少.

我试图在文件中打印一个缓冲区,fprintf但在某一点上,我觉得它更多的是320KB.并将fprintf截断的字符串写入文件.有没有限制%s?

c linux printf

14
推荐指数
1
解决办法
1974
查看次数

什么是C#中的printf

我想知道在C#中使用什么来在我的控制台窗口中格式化我的输出我试图使用\ t但它不起作用

我知道C中有printf来格式化我的输出

检查此图片 https://s15.postimg.cc/94fstpi2z/Console.png

c# printing format printf

14
推荐指数
1
解决办法
6万
查看次数

如何在`printf()`中使用"zd"说明符?

寻找澄清使用"zd"与printf().

当然,以下对于C99及更高版本是正确的.

void print_size(size_t sz) {
  printf("%zu\n", sz);
}
Run Code Online (Sandbox Code Playgroud)

C规范似乎允许printf("%zd\n", sz)取决于它的读取方式:

7.21.6.1 fprintf功能

z用于指定后续的d,i,o,u,x,或X转换说明适用于size_t或相应的符号整型参数; 或者以下n转换说明符适用于指向与size_t参数对应的有符号整数类型的指针.C11dr§7.21.6.17

这应该是作为

  1. " z指定以下d...转换说明符适用于size_t或相应的有符号整数类型参数..."(两种类型)和" z指定以下u...转换说明符适用于size_t或相应的有符号整数类型参数. .."(两种类型)

要么

  1. " z指定以下d...转换说明符适用于相应的有符号整数类型参数..."(仅限带符号类型)和" z指定以下u...转换说明符适用于size_t"(仅限无符号类型).

我一直在使用#2定义,但现在不太确定.

哪个是正确的,1,2或其他什么?

如果#2是正确的,那么可以使用"%zd"哪种类型的示例是什么?

c printf

14
推荐指数
1
解决办法
2万
查看次数

从什么版本的Visual Studio开始vsnprintf大部分都符合标准?

根据微软的文档vsnprintf,该功能至少是2003年版Visual Studio中C(++)运行时库的一部分.

int vsnprintf( char *buffer,        // Storage location for output
               size_t count,        // Maximum number of characters to write
               const char *format,  // Format specification
               va_list argptr )     // Pointer to list of other arguments
Run Code Online (Sandbox Code Playgroud)

我问:Visual Studio的哪个版本是vsnprintfx86和x64的捆绑C(++)RTL的实现,符合C99标准(ISO/IEC 9899:1999),假设

  • #define _CRT_SECURE_NO_WARNINGS以前执行#include <stdio.h>,这是现代版本的Visual Studio RTL所必需的;
  • 如果count大于零,则buffer指向(至少)count可写字符;
  • 格式不NULL符合Microsoft的格式规范语法,适用于特定版本的RTL;
  • 的值count和字符,以产生均足够小以适合类型的数目int;

并且我们希望符合(包括标称输入的基本功能)这些要求(由标准的规范暗示snprintf,vsnprintf引用):

  1. 在上述假设下不产生未定义的行为(包括调用Microsoft的无效参数处理程序);
  2. 当buffer==NULL和时返回要写入的长度(不包括终止空字符) …

c c++ standards printf visual-studio

14
推荐指数
1
解决办法
993
查看次数