473,386 Members | 1,602 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,386 software developers and data experts.

Text to string program

This is a program to convert a text file to a C string.
It is offered as a service to the comp.lang.c community.

Originally I thought it would be a five minute job to program. In fact there
are subtle problems, such as the fact that a text file may wrap lines.

It will be appearing on my website as soon as I get update access, assuming
no one finds anything wrong with it.

/*
texttostring - converts a text file to a C string
By Malcolm McLean
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

#include "texttostring.h"

char *fnametoid(char *path);
char *loadfile(FILE *fp);

/*
print out a message showing how to use the program
*/
int usage(void)
{
printf("Program to take in a text file and spit it out as a C string\n");
printf("Usage: texttostring <infile.txt[id]\n");
printf(" infile.txt - text file\n");
printf(" id - identifier of string, default is file name\n");
exit(EXIT_FAILURE);
}

/*
main function
argv[1] - the name of the file to turn into a C string
argv[2] - (optional) name of the identifier to use
*/
int main(int argc, char **argv)
{
FILE *fp;
char *id;
char *str;
char *cstr;
long i;

if(argc != 2 && argc != 3)
usage();

if(argc == 3)
id = argv[2];
else
id = fnametoid(argv[1]);
if(!id)
{
fprintf(stderr, "Out of memory\n");
exit(EXIT_FAILURE);
}

fp = fopen(argv[1], "r");
if(!fp)
{
fprintf(stderr, "Couldn't open file\n");
exit(EXIT_FAILURE);
}
str = loadfile(fp);
fclose(fp);

if(str)
{
cstr = texttostring(str);
if(!cstr)
{
fprintf(stderr, "Out of memory\n");
exit(EXIT_FAILURE);
}
printf("char *%s = ", id);
for(i=0;cstr[i];i++)
fputc(cstr[i], stdout);
printf(";\n");
}
else
{
fprintf(stderr, "Out of memory\n");
exit(EXIT_FAILURE);
}

if(id != argv[2])
free(id);
free(str);
free(cstr);

return 0;
}

/*
convert a file name to a valid C identifier, by replacing
non-alphanmerics with dights.
*/
char *fnametoid(char *path)
{
char *answer;
char *ptr;

answer = malloc(strlen(path) + 2);
if(!answer)
return 0;

ptr = answer;
if(!isalpha(*path))
*ptr++ = 'a';
while(*path)
{
if(isalnum(*path))
*ptr++ = *path;
else
*ptr++ = '_';
path++;
}
*ptr = 0;

return answer;
}
/*
load a text file into memory

*/
char *loadfile(FILE *fp)
{
long len;
long i = 0;
char *answer;
char *temp;
int ch;

fseek(fp, 0, SEEK_END);
len = ftell(fp);
fseek(fp, 0, SEEK_SET);

answer = malloc(len + 100 + len/10);
if(!answer)
return 0;
len = len + 100 + len/10;
while( (ch = fgetc(fp)) != EOF)
{
answer[i++] = (char) ch;
if(i < 0)
{
free(answer);
return 0;
}
if(i >= len - 1)
{
temp = realloc(answer, len + 100 + len/10);
if(!temp)
{
free(answer);
return 0;
}
answer = temp;
len = len + 100 + len/10;
}
}
answer[i] = 0;

return answer;
}

/* header file */
#ifndef texttostring_h
#define texttostring_h

char *texttostring(const char *str);
int escaped(int ch);
char escapechar(int ch);

#endif

/*
text to string functions
*/
#include <string.h>
#include <stdlib.h>

#include "texttostring.h"

static size_t linesbiggerthan(const char *str, size_t maxlen);

/*
convert a string to a C language string;
Params:
str - the string to convert
Returns: C version of string, 0 on out of memory
Notes: newlines are represented by breaks in the string.
*/
char *texttostring(const char *str)
{
size_t len = 0;
size_t i;
size_t j = 0;
size_t linelen = 0;
char *answer;

for(i=0;str[i];i++)
{
if(str[i] == '\n')
len += 5;
else if(escaped(str[i]))
len+=2;
else
len += 1;
}
len += linesbiggerthan(str, 100) * 3;
len++;
len += 2;
answer = malloc(len);
if(!answer)
return 0;
answer[j++] = '"';
for(i=0;str[i];i++)
{
if(str[i] == '\n' && str[i+1] != 0)
{
answer[j++] = '\\';
answer[j++] = 'n';
answer[j++] = '\"';
answer[j++] = '\n';
answer[j++] = '\"';
linelen = 0;
}
else if(escaped(str[i]))
{
answer[j++] = '\\';
answer[j++] = escapechar(str[i]);
linelen++;
}
else
{
answer[j++] = str[i];
linelen++;
}
if(linelen == 100 && str[i+1] != '\n')
{
answer[j++] = '\"';
answer[j++] = '\n';
answer[j++] = '\"';
linelen = 0;
}
}
answer[j++] = '\"';
answer[j++] = 0;

return answer;
}

/*
test if a character is escaped in C
Params: ch - the character to test
Returns: 1 if escaped in C strings, else 0
*/
int escaped(int ch)
{
char *escapes = "\a\b\f\n\r\t\v\?\'\"\\";

if(ch == 0)
return 1;
return strchr(escapes, ch) ? 1 : 0;
}

/*
get the escape character to represent ch
Params: ch - an escaped character
Returns: character that stands in for it in esacpe sequence,
0 if ch is not an escaped character
*/
char escapechar(int ch)
{
char *escapes = "\a\b\f\n\r\t\v\?\'\"\\";
char *characters = "abfnrtv?\'\"\\";
char *ptr;

if(ch == 0)
return '0';
ptr = strchr(escapes, ch);
if(ptr)
return characters[ptr - escapes];
else
return 0;
}

/*
get the number of lines bigger than a certain value
*/
static size_t linesbiggerthan(const char *str, size_t maxlen)
{
size_t len = 0;
size_t answer = 0;

while(*str)
{
if(*str == '\n')
len = 0;
else
{
len++;
if(len maxlen)
{
len = 0;
answer++;
}
}
str++;
}

return answer;
}

--
www.personal.leeds.ac.uk/~bgy1mm
freeware games to download.
Aug 27 '06 #1
7 2584
Malcolm wrote:
This is a program to convert a text file to a C string.
It is offered as a service to the comp.lang.c community.
You need to work on the documentation. Reading the
description above or usage() I wasn't at all sure what the
programme is supposed to do. I take it that the idea is that
the output of the programme will be of the form
char name_of_str[] = "......" such that if in some C programme
you have something like fprintf(new_file,"%s",name_of_str) ;
then the file where new_file points to will be identical to the
file where name_of_str came from. Have I got it right ?

By the way , why does usage() return int and not void ?

Spiros Bousbouras

Aug 27 '06 #2
On Sun, 27 Aug 2006 20:15:52 +0100, "Malcolm"
<re*******@btinternet.comwrote:
>This is a program to convert a text file to a C string.
It is offered as a service to the comp.lang.c community.

Originally I thought it would be a five minute job to program. In fact there
are subtle problems, such as the fact that a text file may wrap lines.

It will be appearing on my website as soon as I get update access, assuming
no one finds anything wrong with it.

/*
texttostring - converts a text file to a C string
By Malcolm McLean
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

#include "texttostring.h"

char *fnametoid(char *path);
char *loadfile(FILE *fp);

/*
print out a message showing how to use the program
*/
int usage(void)
Why do you declare the function as returning an int when it doesn't.
>{
printf("Program to take in a text file and spit it out as a C string\n");
printf("Usage: texttostring <infile.txt[id]\n");
printf(" infile.txt - text file\n");
printf(" id - identifier of string, default is file name\n");
exit(EXIT_FAILURE);
}

/*
main function
argv[1] - the name of the file to turn into a C string
argv[2] - (optional) name of the identifier to use
*/
int main(int argc, char **argv)
{
FILE *fp;
char *id;
char *str;
char *cstr;
long i;

if(argc != 2 && argc != 3)
usage();

if(argc == 3)
id = argv[2];
else
id = fnametoid(argv[1]);
if(!id)
{
fprintf(stderr, "Out of memory\n");
exit(EXIT_FAILURE);
Consistent indenting is a virtue.
}

fp = fopen(argv[1], "r");
if(!fp)
{
fprintf(stderr, "Couldn't open file\n");
It would be nice to identify the file in the error message.
exit(EXIT_FAILURE);
}
str = loadfile(fp);
fclose(fp);

if(str)
{
cstr = texttostring(str);
if(!cstr)
{
fprintf(stderr, "Out of memory\n");
This is the same error message used if fnametoid fails. Different
messages would at least give the user a clue where the problem was.
exit(EXIT_FAILURE);
}
printf("char *%s = ", id);
for(i=0;cstr[i];i++)
fputc(cstr[i], stdout);
Is there some benefit to writing one character at a time rather than
the entire string?
printf(";\n");
}
else
Which if does this else relate to? This is why indenting can help.
{
fprintf(stderr, "Out of memory\n");
exit(EXIT_FAILURE);
}

if(id != argv[2])
free(id);
free(str);
free(cstr);

return 0;
}

/*
convert a file name to a valid C identifier, by replacing
non-alphanmerics with dights.
*/
char *fnametoid(char *path)
{
snip
>}
/*
load a text file into memory

*/
char *loadfile(FILE *fp)
{
long len;
long i = 0;
char *answer;
char *temp;
int ch;

fseek(fp, 0, SEEK_END);
len = ftell(fp);
fseek(fp, 0, SEEK_SET);

answer = malloc(len + 100 + len/10);
For a text file, the value returned by ftell is not necessarily the
number of characters in the file. See n1124, paragraph 7.19.9.4-2.
if(!answer)
return 0;
len = len + 100 + len/10;
while( (ch = fgetc(fp)) != EOF)
Is there some benefit to reading each character individually rather
than the entire file at once with fread?
{
answer[i++] = (char) ch;
if(i < 0)
i starts at 0 and is incremented. When do you expect it to be
negative? (Hint: overflow is not a good answer.)
{
free(answer);
return 0;
}
if(i >= len - 1)
{
temp = realloc(answer, len + 100 + len/10);
if(!temp)
{
free(answer);
return 0;
}
answer = temp;
len = len + 100 + len/10;
}
}
answer[i] = 0;

return answer;
}
snip header and utility functions
Remove del for email
Aug 27 '06 #3
Malcolm wrote:
>
offered as a
That reminds me too much of:
"... offered as a
contribution to education
to be used only by the State of Indiana free of cost
by paying any royalties whatever on the same,
provided it is accepted and adopted by the
official action of the Legislature of 1897."
>
Originally I thought it would be a five minute job to program. In fact there
are subtle problems, such as the fact that a text file may wrap lines.

It will be appearing on my website as soon as I get update access, assuming
no one finds anything wrong with it.

/*
texttostring - converts a text file to a C string
By Malcolm McLean
*/
This is my version of that:

/* BEGIN type_1.c */

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

#define ARGV_0 "type_1"

int line_to_string(FILE *fp, char **line, size_t *size);

int main(int argc, char *argv[])
{
int rc;
FILE *fd;
char *buff_ptr;
size_t buff_size;

buff_size = 0;
buff_ptr = NULL;
if (argc 1) {
while (*++argv != NULL) {
fd = fopen(*argv, "r");
if (fd != NULL) {
while ((rc = line_to_string
(fd, &buff_ptr, &buff_size)) 0)
{
switch (rc) {
case EOF:
if (buff_ptr != NULL
&& strlen(buff_ptr) 0)
{
puts("rc equals EOF\n"
"The string in buff_ptr is:");
puts(buff_ptr);
}
break;
case 0:
puts("realloc returned a null pointer "
"value in line_to_string.");
if (buff_size 1) {
puts("rc equals 0\n"
"The string in buff_ptr is:");
puts(buff_ptr);
}
break;
default:
puts(buff_ptr);
break;
}
}
fclose(fd);
} else {
fprintf(stderr,
"\nfopen() problem with \"%s\"\n", *argv);
break;
}
}
free(buff_ptr);
} else {
puts(
"Usage:\n>" ARGV_0
" <FILE_0.txt<FILE_1.txt<FILE_2.txt...\n"
);
}
return 0;
}

int line_to_string(FILE *fp, char **line, size_t *size)
{
int rc;
void *p;
size_t count;

count = 0;
while ((rc = getc(fp)) != EOF) {
++count;
if (count + 2 *size) {
p = realloc(*line, count + 2);
if (p == NULL) {
if (*size count) {
(*line)[count] = '\0';
(*line)[count - 1] = (char)rc;
} else {
ungetc(rc, fp);
}
count = 0;
break;
}
*line = p;
*size = count + 2;
}
if (rc == '\n') {
(*line)[count - 1] = '\0';
break;
}
(*line)[count - 1] = (char)rc;
}
if (rc != EOF) {
rc = count INT_MAX ? INT_MAX : count;
} else {
if (*size count) {
(*line)[count] = '\0';
}
}
return rc;
}

/* END type_1.c */

--
pete
Aug 27 '06 #4

"Barry Schwarz" <sc******@doezl.netwrote in message
news:im********************************@4ax.com...
On Sun, 27 Aug 2006 20:15:52 +0100, "Malcolm"
<re*******@btinternet.comwrote:
>>This is a program to convert a text file to a C string.
It is offered as a service to the comp.lang.c community.

Originally I thought it would be a five minute job to program. In fact
there
are subtle problems, such as the fact that a text file may wrap lines.

It will be appearing on my website as soon as I get update access,
assuming
no one finds anything wrong with it.

/*
texttostring - converts a text file to a C string
By Malcolm McLean
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

#include "texttostring.h"

char *fnametoid(char *path);
char *loadfile(FILE *fp);

/*
print out a message showing how to use the program
*/
int usage(void)

Why do you declare the function as returning an int when it doesn't.
Slip.
>
>>{
printf("Program to take in a text file and spit it out as a C
string\n");
printf("Usage: texttostring <infile.txt[id]\n");
printf(" infile.txt - text file\n");
printf(" id - identifier of string, default is file name\n");
exit(EXIT_FAILURE);
}

/*
main function
argv[1] - the name of the file to turn into a C string
argv[2] - (optional) name of the identifier to use
*/
int main(int argc, char **argv)
{
FILE *fp;
char *id;
char *str;
char *cstr;
long i;

if(argc != 2 && argc != 3)
usage();

if(argc == 3)
id = argv[2];
else
id = fnametoid(argv[1]);
if(!id)
{
fprintf(stderr, "Out of memory\n");
exit(EXIT_FAILURE);

Consistent indenting is a virtue.
That is usenet's idea of filtering code.
> }

fp = fopen(argv[1], "r");
if(!fp)
{
fprintf(stderr, "Couldn't open file\n");

It would be nice to identify the file in the error message.
Fair point.
>exit(EXIT_FAILURE);
}
str = loadfile(fp);
fclose(fp);

if(str)
{
cstr = texttostring(str);
if(!cstr)
{
fprintf(stderr, "Out of memory\n");

This is the same error message used if fnametoid fails. Different
messages would at least give the user a clue where the problem was.
If the machine runs out of memory, that's all the user really wants to know.
A debugger would want to know which function caused the machine to run out,
but this program doesn't have any bugs (:-))
> exit(EXIT_FAILURE);
}
printf("char *%s = ", id);
for(i=0;cstr[i];i++)
fputc(cstr[i], stdout);

Is there some benefit to writing one character at a time rather than
the entire string?
Yes. The string might be very long. Modern functions will probably tolerate
this, but you can't be sure. Better to be on the safe side.
>printf(";\n");
}
else

Which if does this else relate to? This is why indenting can help.
> {
fprintf(stderr, "Out of memory\n");
exit(EXIT_FAILURE);
}

if(id != argv[2])
free(id);
free(str);
free(cstr);

return 0;
}

/*
convert a file name to a valid C identifier, by replacing
non-alphanmerics with dights.
*/
char *fnametoid(char *path)
{
snip
>>}
/*
load a text file into memory

*/
char *loadfile(FILE *fp)
{
long len;
long i = 0;
char *answer;
char *temp;
int ch;

fseek(fp, 0, SEEK_END);
len = ftell(fp);
fseek(fp, 0, SEEK_SET);

answer = malloc(len + 100 + len/10);

For a text file, the value returned by ftell is not necessarily the
number of characters in the file. See n1124, paragraph 7.19.9.4-2.
Yes, I know. See below.
> if(!answer)
return 0;
len = len + 100 + len/10;
while( (ch = fgetc(fp)) != EOF)

Is there some benefit to reading each character individually rather
than the entire file at once with fread?
The idea is that, should our return from ftell() be in error, we recover
from the problem.
> {
answer[i++] = (char) ch;
if(i < 0)

i starts at 0 and is incremented. When do you expect it to be
negative? (Hint: overflow is not a good answer.)
Fair point. Should check i against INT_MAX.
>
>{
free(answer);
return 0;
}
if(i >= len - 1)
{
temp = realloc(answer, len + 100 + len/10);
if(!temp)
{
free(answer);
return 0;
}
answer = temp;
len = len + 100 + len/10;
}
}
answer[i] = 0;

return answer;
}
Surprising how much you can find in simple functions to slurp in files.
The moral is that when the language breaks to make such things difficult,
the attempts to code round the problem tend to introduce their own mistakes.

--
www.personal.leeds.ac.uk/~bgy1mm
freeware games to download.
Aug 27 '06 #5
av
On Sun, 27 Aug 2006 20:15:52 +0100, Malcolm wrote:
>char *loadfile(FILE *fp)
{
long len;
long i = 0;
char *answer;
char *temp;
int ch;

fseek(fp, 0, SEEK_END);
len = ftell(fp);
fseek(fp, 0, SEEK_SET);

answer = malloc(len + 100 + len/10);
if(!answer)
return 0;
len = len + 100 + len/10;
while( (ch = fgetc(fp)) != EOF)
{
answer[i++] = (char) ch;
if(i < 0)
{
free(answer);
return 0;
}
if(i >= len - 1)
{
temp = realloc(answer, len + 100 + len/10);
i think this is an error
it should be at last
if(i >= len - 1)
{ len=2*i;
temp = realloc(answer, len + 100 + len/10);

or

if(i >= len - 1)
{ len=len + 100 + len/10;
temp = realloc(answer, len + 100 + len/10);

if(!temp)
{
free(answer);
return 0;
}
answer = temp;
len = len + 100 + len/10;
}
}
answer[i] = 0;

return answer;
}
Aug 28 '06 #6
"Malcolm" <re*******@btinternet.comwrote:
"Barry Schwarz" <sc******@doezl.netwrote in message
On Sun, 27 Aug 2006 20:15:52 +0100, "Malcolm"
if(argc == 3)
id = argv[2];
else
id = fnametoid(argv[1]);
if(!id)
{
fprintf(stderr, "Out of memory\n");
exit(EXIT_FAILURE);
Consistent indenting is a virtue.
That is usenet's idea of filtering code.
No, it isn't.

if(argc == 3)
id = argv[2];
else
id = fnametoid(argv[1]);
if(!id)
{
fprintf(stderr, "Out of memory\n");
exit(EXIT_FAILURE);

Problems with indentation on Usenet? I don't think so. Problems with
Outhouse Express and tabs, perhaps.

Richard
Aug 28 '06 #7

Barry Schwarz <sc******@doezl.netwrote in message
news:im********************************@4ax.com...
On Sun, 27 Aug 2006 20:15:52 +0100, "Malcolm"
<re*******@btinternet.comwrote:
This is a program to convert a text file to a C string.
It is offered as a service to the comp.lang.c community.

Originally I thought it would be a five minute job to program. In fact
there
are subtle problems, such as the fact that a text file may wrap lines.

It will be appearing on my website as soon as I get update access,
assuming
no one finds anything wrong with it.

/*
texttostring - converts a text file to a C string
By Malcolm McLean
*/
....
for(i=0;cstr[i];i++)
fputc(cstr[i], stdout);

Is there some benefit to writing one character at a time rather than
the entire string?
....
fseek(fp, 0, SEEK_END);
len = ftell(fp);
fseek(fp, 0, SEEK_SET);

answer = malloc(len + 100 + len/10);

For a text file, the value returned by ftell is not necessarily the
number of characters in the file. See n1124, paragraph 7.19.9.4-2.
....
if(!answer)
return 0;
len = len + 100 + len/10;
while( (ch = fgetc(fp)) != EOF)

Is there some benefit to reading each character individually rather
than the entire file at once with fread?
Hmmmm...isn't this all equivalent to SOMETHING like the following,
ASSUMING you were working on a UNIX system and NEVER opened
like gigabyte-sized files?

#include <stdio.h>
#include <stdlib.h>
#include <alloc.h>
#include <sys\stat.h>

FILE *file_stream;
char *file_buffer;
char file_path[64];

unsigned read_file_to_buffer(char *buf_ptr,FILE *fl_strm) {
unsigned long file_size;
struct stat file_info;

if(fstat(fileno(fl_strm),&file_info)==0)
file_size=file_info.st_size;
else return FALSE;

if((buf_ptr=malloc(file_size))==NULL) {
printf("\nNot enough memory to allocate file buffer");
return FALSE;
}

if(fread(buf_ptr,file_size,1,fl_strm)<file_size)
return FALSE;

else return TRUE;
}

int main(void) {

printf("\nEnter the complete path and filename: ");
gets(file_path);

if ((file_stream= fopen(file_path, "r"))==NULL) {
fprintf(stderr,"\nCannot open input file.");
return 1;
}

if(!read_file_to_buffer(file_buffer,file_stream)) {
printf("\nCouldn't read the file into the buffer...sorry...");
return 1;
}

else {
printf("\nHere's your file from the buffer: \n");
puts(file_buffer);
}

free(file_buffer);

return 0;
}

I mean, is there some fundamental reason why this wouldn't work
given the constraints listed above?

---
William Ernest Reid

Aug 29 '06 #8

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

9
by: carl.barrett | last post by:
Hi, Let me explain. I have been given a file that I need to bring into an Access table. Here is a snippet of the file. 100833983 1 MRS M I BATTY 1 000001 00833983
8
by: Yeow | last post by:
hello, i was trying to use the fread function on SunOS and ran into some trouble. i made a simple test as follows: i'm trying to read in a binary file (generated from a fortran code) that...
0
by: Daniel Perron | last post by:
Hi, I was trying to use Galois.Net to specify code generators and I had to look for some text template tool to simplify the syntax. I was looking for something similar to the syntax of an...
16
by: Christine | last post by:
I was wondering if it is possible to read in a text file as a data type other than string. I would like to read it in as some type that handles numbers, like double, or float.
1
by: TJ | last post by:
I am very new to C# (this is my first real project), therefore please be patient if my question is considered being to newbie. I am modifying a program which takes a text file, does some...
2
by: Killer42 | last post by:
The Input #1 statement simply reads in one line from a text file (in this case you INI file) and places the values from it into one or more variables. So what you are reading in this statement is...
9
by: =?Utf-8?B?QnJpYW4gQ29vaw==?= | last post by:
I want to open a text file and format it into a specific line and then apply color to a specific location of the text and then display it in a RichTextBox after all of this is done. I can do all...
0
Debadatta Mishra
by: Debadatta Mishra | last post by:
Introduction In this article I will provide you an approach to manipulate an image file. This article gives you an insight into some tricks in java so that you can conceal sensitive information...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: aa123db | last post by:
Variable and constants Use var or let for variables and const fror constants. Var foo ='bar'; Let foo ='bar';const baz ='bar'; Functions function $name$ ($parameters$) { } ...
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.