Is there a way to populate an ellipses parameter programmatically?












0















I'm going to be getting in data from a file of my own making. This file will contain a printf format string and the parameters passed to it. I've already generated this code.



Now I want to do the reverse. Read format string and the parameters and pass it back to printf functions. Can I somehow generate the appropriate call stack or am I going to have to reparse the format string and send it to printf() piecemeal?



Edit



I know the risks with the printf functions. I understand that there are security vulnerabilities. These issues are non-issues as:




  1. This is to be used in a debugging context. Not to be handled outside of that scope.

  2. Executable that reads the file, is executed by the person who made the file.

  3. The datafile created will be read by an executable that simply expands the file and is not accessible by a third party.

  4. It has no access to writing anything to memory (%n is not valid).


Use Case



To compress a stream with minimal CPU overhead by tracking constantly repeating strings and replacing them with enumerations. All other data is saved as binary data, thus requiring only minimal processing instead of having to convert it to a large string every time.










share|improve this question

























  • Neither. snprintf() is prehistoric C. Modern C++ code uses the streams library, that implements formatted output in a fundamentally different way. If someone's intent is to learn modern C++, they should not be wasting their time on old-style C formatting.

    – Sam Varshavchik
    Nov 23 '18 at 2:50











  • related: stackoverflow.com/q/150543/1132334

    – dlatikay
    Nov 23 '18 at 2:50











  • This also creates a pretty glaring security vulnerability.

    – Peter Ruderman
    Nov 23 '18 at 2:52











  • @PeterRuderman, the security vulnerability is negligible as it is for local logging and not for public consumption.

    – Adrian
    Nov 23 '18 at 2:55








  • 1





    It is true that streams have higher overhead than C-style stdio formatting. However, with modern, multi-Ghz CPUs, this only becomes an issue when generating huge amounts of output. Any difference in "throughput" between streams and C-style stdio formatting is mostly academic, otherwise. And, with C++ streams you get type-safety. The best way to avoid writings bugs is to make it logically impossible to create them; and type-safety makes many classes of bugs logically impossible.

    – Sam Varshavchik
    Nov 23 '18 at 3:39
















0















I'm going to be getting in data from a file of my own making. This file will contain a printf format string and the parameters passed to it. I've already generated this code.



Now I want to do the reverse. Read format string and the parameters and pass it back to printf functions. Can I somehow generate the appropriate call stack or am I going to have to reparse the format string and send it to printf() piecemeal?



Edit



I know the risks with the printf functions. I understand that there are security vulnerabilities. These issues are non-issues as:




  1. This is to be used in a debugging context. Not to be handled outside of that scope.

  2. Executable that reads the file, is executed by the person who made the file.

  3. The datafile created will be read by an executable that simply expands the file and is not accessible by a third party.

  4. It has no access to writing anything to memory (%n is not valid).


Use Case



To compress a stream with minimal CPU overhead by tracking constantly repeating strings and replacing them with enumerations. All other data is saved as binary data, thus requiring only minimal processing instead of having to convert it to a large string every time.










share|improve this question

























  • Neither. snprintf() is prehistoric C. Modern C++ code uses the streams library, that implements formatted output in a fundamentally different way. If someone's intent is to learn modern C++, they should not be wasting their time on old-style C formatting.

    – Sam Varshavchik
    Nov 23 '18 at 2:50











  • related: stackoverflow.com/q/150543/1132334

    – dlatikay
    Nov 23 '18 at 2:50











  • This also creates a pretty glaring security vulnerability.

    – Peter Ruderman
    Nov 23 '18 at 2:52











  • @PeterRuderman, the security vulnerability is negligible as it is for local logging and not for public consumption.

    – Adrian
    Nov 23 '18 at 2:55








  • 1





    It is true that streams have higher overhead than C-style stdio formatting. However, with modern, multi-Ghz CPUs, this only becomes an issue when generating huge amounts of output. Any difference in "throughput" between streams and C-style stdio formatting is mostly academic, otherwise. And, with C++ streams you get type-safety. The best way to avoid writings bugs is to make it logically impossible to create them; and type-safety makes many classes of bugs logically impossible.

    – Sam Varshavchik
    Nov 23 '18 at 3:39














0












0








0








I'm going to be getting in data from a file of my own making. This file will contain a printf format string and the parameters passed to it. I've already generated this code.



Now I want to do the reverse. Read format string and the parameters and pass it back to printf functions. Can I somehow generate the appropriate call stack or am I going to have to reparse the format string and send it to printf() piecemeal?



Edit



I know the risks with the printf functions. I understand that there are security vulnerabilities. These issues are non-issues as:




  1. This is to be used in a debugging context. Not to be handled outside of that scope.

  2. Executable that reads the file, is executed by the person who made the file.

  3. The datafile created will be read by an executable that simply expands the file and is not accessible by a third party.

  4. It has no access to writing anything to memory (%n is not valid).


Use Case



To compress a stream with minimal CPU overhead by tracking constantly repeating strings and replacing them with enumerations. All other data is saved as binary data, thus requiring only minimal processing instead of having to convert it to a large string every time.










share|improve this question
















I'm going to be getting in data from a file of my own making. This file will contain a printf format string and the parameters passed to it. I've already generated this code.



Now I want to do the reverse. Read format string and the parameters and pass it back to printf functions. Can I somehow generate the appropriate call stack or am I going to have to reparse the format string and send it to printf() piecemeal?



Edit



I know the risks with the printf functions. I understand that there are security vulnerabilities. These issues are non-issues as:




  1. This is to be used in a debugging context. Not to be handled outside of that scope.

  2. Executable that reads the file, is executed by the person who made the file.

  3. The datafile created will be read by an executable that simply expands the file and is not accessible by a third party.

  4. It has no access to writing anything to memory (%n is not valid).


Use Case



To compress a stream with minimal CPU overhead by tracking constantly repeating strings and replacing them with enumerations. All other data is saved as binary data, thus requiring only minimal processing instead of having to convert it to a large string every time.







c++






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 23 '18 at 3:32







Adrian

















asked Nov 23 '18 at 2:45









AdrianAdrian

3,97822162




3,97822162













  • Neither. snprintf() is prehistoric C. Modern C++ code uses the streams library, that implements formatted output in a fundamentally different way. If someone's intent is to learn modern C++, they should not be wasting their time on old-style C formatting.

    – Sam Varshavchik
    Nov 23 '18 at 2:50











  • related: stackoverflow.com/q/150543/1132334

    – dlatikay
    Nov 23 '18 at 2:50











  • This also creates a pretty glaring security vulnerability.

    – Peter Ruderman
    Nov 23 '18 at 2:52











  • @PeterRuderman, the security vulnerability is negligible as it is for local logging and not for public consumption.

    – Adrian
    Nov 23 '18 at 2:55








  • 1





    It is true that streams have higher overhead than C-style stdio formatting. However, with modern, multi-Ghz CPUs, this only becomes an issue when generating huge amounts of output. Any difference in "throughput" between streams and C-style stdio formatting is mostly academic, otherwise. And, with C++ streams you get type-safety. The best way to avoid writings bugs is to make it logically impossible to create them; and type-safety makes many classes of bugs logically impossible.

    – Sam Varshavchik
    Nov 23 '18 at 3:39



















  • Neither. snprintf() is prehistoric C. Modern C++ code uses the streams library, that implements formatted output in a fundamentally different way. If someone's intent is to learn modern C++, they should not be wasting their time on old-style C formatting.

    – Sam Varshavchik
    Nov 23 '18 at 2:50











  • related: stackoverflow.com/q/150543/1132334

    – dlatikay
    Nov 23 '18 at 2:50











  • This also creates a pretty glaring security vulnerability.

    – Peter Ruderman
    Nov 23 '18 at 2:52











  • @PeterRuderman, the security vulnerability is negligible as it is for local logging and not for public consumption.

    – Adrian
    Nov 23 '18 at 2:55








  • 1





    It is true that streams have higher overhead than C-style stdio formatting. However, with modern, multi-Ghz CPUs, this only becomes an issue when generating huge amounts of output. Any difference in "throughput" between streams and C-style stdio formatting is mostly academic, otherwise. And, with C++ streams you get type-safety. The best way to avoid writings bugs is to make it logically impossible to create them; and type-safety makes many classes of bugs logically impossible.

    – Sam Varshavchik
    Nov 23 '18 at 3:39

















Neither. snprintf() is prehistoric C. Modern C++ code uses the streams library, that implements formatted output in a fundamentally different way. If someone's intent is to learn modern C++, they should not be wasting their time on old-style C formatting.

– Sam Varshavchik
Nov 23 '18 at 2:50





Neither. snprintf() is prehistoric C. Modern C++ code uses the streams library, that implements formatted output in a fundamentally different way. If someone's intent is to learn modern C++, they should not be wasting their time on old-style C formatting.

– Sam Varshavchik
Nov 23 '18 at 2:50













related: stackoverflow.com/q/150543/1132334

– dlatikay
Nov 23 '18 at 2:50





related: stackoverflow.com/q/150543/1132334

– dlatikay
Nov 23 '18 at 2:50













This also creates a pretty glaring security vulnerability.

– Peter Ruderman
Nov 23 '18 at 2:52





This also creates a pretty glaring security vulnerability.

– Peter Ruderman
Nov 23 '18 at 2:52













@PeterRuderman, the security vulnerability is negligible as it is for local logging and not for public consumption.

– Adrian
Nov 23 '18 at 2:55







@PeterRuderman, the security vulnerability is negligible as it is for local logging and not for public consumption.

– Adrian
Nov 23 '18 at 2:55






1




1





It is true that streams have higher overhead than C-style stdio formatting. However, with modern, multi-Ghz CPUs, this only becomes an issue when generating huge amounts of output. Any difference in "throughput" between streams and C-style stdio formatting is mostly academic, otherwise. And, with C++ streams you get type-safety. The best way to avoid writings bugs is to make it logically impossible to create them; and type-safety makes many classes of bugs logically impossible.

– Sam Varshavchik
Nov 23 '18 at 3:39





It is true that streams have higher overhead than C-style stdio formatting. However, with modern, multi-Ghz CPUs, this only becomes an issue when generating huge amounts of output. Any difference in "throughput" between streams and C-style stdio formatting is mostly academic, otherwise. And, with C++ streams you get type-safety. The best way to avoid writings bugs is to make it logically impossible to create them; and type-safety makes many classes of bugs logically impossible.

– Sam Varshavchik
Nov 23 '18 at 3:39












0






active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53440070%2fis-there-a-way-to-populate-an-ellipses-parameter-programmatically%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes
















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53440070%2fis-there-a-way-to-populate-an-ellipses-parameter-programmatically%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

"Incorrect syntax near the keyword 'ON'. (on update cascade, on delete cascade,)

Alcedinidae

RAC Tourist Trophy