gpt4 book ai didi

c - 构建一个复杂的字符串?

转载 作者:行者123 更新时间:2023-12-04 10:45:26 25 4
gpt4 key购买 nike

我有一堆 printf() 可以正确打印我必须构建的相当复杂的字符串。

问题是我需要将该字符串存储在一个变量中(所有这些 printf() 的结果一起通过套接字发送它们。我很确定我需要它们立即发送 - 但如果您想说服我那不是真的,我会打开一个小窗口。

实现该目标的最佳方法是什么?

字符串长度是可变的。我听说过 sprintf()realloc(),甚至 asprintf(),但我不知道如何混合使用所有这些一起。

这是我当前的代码:

void mostrarVariable(char *variable, void *valor) {
printf("%s=%d\n", variable, *(int *)valor);
}

void mostrarEntradaStack(t_registro_stack *entradaStack) {
printf("%d,%s\n", entradaStack->retorno, entradaStack->nombre_funcion);
}

void suspender(t_pcb *pcb) {
char *mensaje = NULL;
mensaje = strdup("1Proceso suspendido...");
// FIXME: guardar los printf en una variable y enviarlo por la red

printf("----------------\n\n");
printf("ID=%d\n", pcb->id_proceso);
printf("PC=%d\n", pcb->program_counter);
printf("\n-- Estructura de codigo --\n");

int indice = 0;

// believe me: this iterates a char** printf-ing each line
while(pcb->codigo[indice] != NULL) {
printf("%s\n", pcb->codigo[indice++]);
}

printf("----------------\n");
printf("\n-- Estructuras de datos --\n");

// believe me: this calls mostrarVariable() for each entry in the pcb->datos dictionary
dictionary_iterator(pcb->datos, mostrarVariable);

printf("----------------\n\n");
printf("-- Estructura de Stack --\n");

// believe me: this calls mostrarEntradaStack() for each element in the stack without modifying it
pila_hacer(pcb->stack, mostrarEntradaStack);

printf("\n----------------\n");

// believe me: this sends "mensaje" via a socket ("pcb->id_proceso"), and it handles the partial send()s and all of that
// it has to be on one socket_send() to correctly send the message length to the other endpoint - the protocol pretty works
socket_send(pcb->id_proceso, mensaje, strlen(mensaje) + 1);
}

相信我,代码目前可以正常工作,但由于 mensaje 的值为“1Proceso suspendido...”,数据会在本地打印,而不是发送到远程。

示例输出:

----------------

ID=4
PC=6

-- Estructura de codigo --
#!/home/desert69/workspaces/operativos/no-quiero/procer/pi/build/pi
# Comentario
variables a,b,c,d,e
comienzo_programa
a=1
b=2;3
c=a+b
d=c-3
f1()
f2()
e=a+c;2
imprimir a
imprimir b
imprimir c
imprimir d
imprimir e
fin_programa
comienzo_funcion f1
a=3
f3()
b=4
fin_funcion f1
comienzo_funcion f2
a=a+1
fin_funcion f2
comienzo_funcion f3
c=d
fin_funcion f3
----------------

-- Estructuras de datos --
c=159769736
d=159769776
a=159769600
b=159769696
e=159769816
----------------

-- Estructura de Stack --

----------------

抱歉,我的代码是西类牙语,但我想确定它与我正在运行的完全相同。也许稍后(如果可以的话)我会尝试翻译它,但我不确定。即使很难,重要的是将每个 printf() 替换为 something 以将这些输出附加到 mensaje

如果您需要任何进一步的信息,请随时发表评论。

谢谢。真的:)

最佳答案

最简单的方法是连接一堆 sprintf 语句。忽略错误条件,该语句返回写入的字符数。所以你基本上可以这样做:

char *bufptr = buffer;
bufptr += sprintf( bufptr, "ID=%d\n", pcb->id_proceso );
bufptr += sprintf( bufptr, "PC=%d\n", pcb->program_counter );

等等

然后 buffer 包含通过连续调用 sprintf 构建的字符串。显然你需要确保缓冲区足够大。如果您预计到任何错误,您还应该处理错误。

此外,您可以使用 bufptr - buffer 获取字符串的最终长度,这对于了解您是否通过套接字发送它很有用。

关于c - 构建一个复杂的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13557280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com