我有一个应用程序,将fprintf提供帮助和错误消息stderr.
如果我stdout退出状态EXIT_SUCCESS(例如当我--help向我的应用程序发出选项时),我应该发送消息吗?
同样,我要不停地发送错误消息stderr的EXIT_FAILURE?
或者我应该发送所有帮助和错误消息stdout?
符合POSIX标准的UNIX应用程序的一般约定是什么?
我有一个GTX 570(Fermi架构),它具有计算能力2.0.我的计算机上有Cuda 4.0版,我使用的是Ubuntu 10.10
使用Cuda 4.0,可以使用printf()内核.以下是Cuda 4.0 编程指南第125页的示例代码
#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ < 200)
#define printf(f, ...) ((void)(f, __VA_ARGS__),0)
#endif
__global__ void helloCUDA(float f)
{
printf(“Hello thread %d, f=%f\n”, threadIdx.x, f);
}
void main()
{
helloCUDA<<<1, 5>>>(1.2345f);
cudaDeviceReset();
}
Run Code Online (Sandbox Code Playgroud)
我收到以下编译错误.
gaurish108 MyPractice: nvcc printf_inkernel.cu -o printf_inkernel
printf_inkernel.cu(10): error: unrecognized token
printf_inkernel.cu(10): error: expected an expression
printf_inkernel.cu(10): error: unrecognized token
printf_inkernel.cu(10): error: unrecognized token
printf_inkernel.cu(10): error: unrecognized token
printf_inkernel.cu(10): error: unrecognized token
printf_inkernel.cu(10): error: unrecognized token
printf_inkernel.cu(10): error: …Run Code Online (Sandbox Code Playgroud) 作为程序的一部分,我使用:
int ret = vprintf (format, args);
Run Code Online (Sandbox Code Playgroud)
在args我得到的堆栈,我不知道到底是什么,压入堆栈。格式是一个字符串,我可以阅读。
在我必须打印浮点数之前,以上方法一直有效。当我打印浮动时,我得到一些奇怪的数字...
我检查了是否调用float fArg = *(reinterpret_cast<const float*>(args)-然后打印fArg正确的值(当args仅由一个实际参数组成时,我尝试了它)
所以可能我需要特殊的"%...f"子格式行为-相应的(sub)参数应强制转换为float。(该...符号表示可以在之前添加精度,宽度等f)。如何实现?
我想打印一个int double double double double double double由ASCII字符组成的表格中的字符串.有哪些方法可以使值与表头保持一致并确保它们不会"溢出"?
我的表头看起来像这样:
+---------+------+------+------+---------+---------+---------+
NrCamere | smin smax smed | pmin pmax pmed
+---------+------+------+------+---------+---------+---------+
Run Code Online (Sandbox Code Playgroud) 我想使数字的输出总是有6位数
例如:
我怎么能用printf/ sprintf?
我有一个Xilinx Virtex-II Pro FPGA板,通过RS232连接到iRobot Create.
iRobot将字节整数流作为命令.
我发现printf实际上会通过串口发送(Hypterminal能够接收我打印的任何东西),并且我认为我可以使用printf将我的数据发送到iRobot.
问题是printf似乎格式化了ascii输出的数据,但我真的希望简单地发送数据raw.
我喜欢这样的东西:
printf(%x %x %x, 0x80, 0x88, 0x08);
Run Code Online (Sandbox Code Playgroud)
但是不是十六进制格式化,我希望它是发送的实际0x80值.
有任何想法吗?
有人可以解释一下为什么我看到while循环的printf()函数的双输入:
#include <ctype.h>
#include <stdio.h>
int main(){
int x = 0;
while ( x != 'q'){
printf("\nEnter a letter:");
x=getchar();
printf("%c\n", x);
if( isalpha(x) )
printf( "You entered a letter of the alphabet\n" );
if( isdigit(x) )
printf( "You entered the digit %c\n", x);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Debian Squeeze(gcc版本4.4.5(Debian 4.4.5-8))中代码的输出是:
Enter a letter:1
1
You entered the digit 1
Enter a letter: // why is the first one appearing ???
Enter a letter:2
2
You entered the digit 2
Run Code Online (Sandbox Code Playgroud) 当我的程序在gdb中被反汇编时,我可以看到buf的地址被压入堆栈,但是我没有看到格式字符串被压到它上面.这是什么原因?它是一个聪明的编译器优化?
我已经尝试编译一些printf语句的不同变体,看看我是否可以模仿"%s"字符串(或它的地址)没有被压入堆栈,但我无法做到.
这是程序代码:
int main(int argc, char **argv) {
char buf[128];
if(argc < 2) return 1;
strcpy(buf, argv[1]);
printf("%s\n", buf);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
用gcc 4.5.2编译,32位linux
嗨,我正在尝试编写一些使用printf打印给定字符串的汇编代码.我在.data部分中使用之前声明我的字符串,测试示例如下所示:
extern printf
extern fflush
LINUX equ 80H ; interupt number for entering Linux kernel
EXIT equ 60 ; Linux system call 1 i.e. exit ()
section .data
outputstringfmt: db "%s", 0
sentence0: db "Hello\nWorld\n", 0
segment .text
global main
main:
mov r8, sentence0
push r8
call print_sentence
add rsp, 8
call os_return
print_sentence:
push rbp
mov rbp, rsp
push r12
mov r12, [rbp + 16]
push rsi
push rdi
push r8
push r9
push r10
mov rsi, r12
mov …Run Code Online (Sandbox Code Playgroud) 我正在使用推力分区功能将数组划分为偶数和奇数.但是,当我尝试显示设备矢量时,它会显示随机值.请告诉我错误在哪里.我想我做的一切都是正确的.
#include<stdio.h>
#include <thrust/host_vector.h>
#include <thrust/device_vector.h>
#include<thrust/partition.h>
struct is_even
{
//const int toCom;
//is_even(int val):toCom(val){}
__device__
bool operator()(const int &x)
{
return x%2;
}
};
void main(){
thrust::host_vector<int> H(6);
for(int i =0 ; i<H.size();i++){
H[i] = i+1;
}
thrust::device_vector<int> D = H;
thrust::partition(D.begin(),D.end(),is_even());
for(int i =0 ;i< D.size();i++){
printf("%d,",D[i]);
}
getchar();
}
Run Code Online (Sandbox Code Playgroud)