#include <stdio.h>
#include <math.h> /* needed for ceil */
#include <string.h> /* needed for strlen */
void make_linspace( int a[ ] , double start, double stop, int num) {
/* Fills array a[] (in place) with linearly spaced values just like np.linspace in NumPy (Python) */
double spacing = ( stop- start) / ( num- 1 ) ;
int i;
for ( i= 0 ; i< num; i++ ) {
a[ i] = start + i* spacing;
}
}
void make_and_print_msgs( int n_proc, int msglength)
{
/* Create a string called msg of length msglength + 1 (for the null character '\0') */
char msg[ msglength+ 1 ] ;
int i;
printf ( "msg intended to be: " ) ; for ( i= 0 ; i< msglength; i++ ) {
msg[ i] = 'a' ;
}
msg[ i] = '\0 ' ;
/* Print message to screen as a string and fine strlen(msg) and sizeof(msg) */
printf ( "msg printed as string: %s\n " , msg
) ; printf ( "sizeof(msg): %d\n \n " , sizeof ( msg
) ) ;
}
int main( int argc, char * argv[ ] )
{
int n_proc = 2 ;
/* Create an array containing the lengths of strings to be printed (In this case, data_length should be {0, 2, 4, 6, 8} */
int start = 0 ;
int stop_range = 10 ; /* the stop value if we are using range() */
int step = 2 ; /* spacing between the integers in the output of range() */
int stop = stop_range - step; /* the stop value if we are using linspace() */
int npoints
= ( int ) ceil ( ( ( double ) stop_range
- ( double ) start
) / ( double ) step
) ; /* number of elements in the list produced by range(start, stop_range, step) */
int data_length[ npoints] ; /* 1D array of string lengths (# of non-null chars in each str) */
make_linspace( data_length, start, stop, npoints) ;
int i;
/* For each length, call on make_and_print_msgs to make a string of that length (plus '\0') and then print to stdout */
printf ( " i data_length[i]\n --------------------\n " ) ; for ( i= 0 ; i< npoints; i++ ) {
printf ( "%4d %7d\n " , i
, data_length
[ i
] ) ; make_and_print_msgs( n_proc, data_length[ i] ) ;
}
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+ICAgLyogbmVlZGVkIGZvciBjZWlsICovCiNpbmNsdWRlIDxzdHJpbmcuaD4gLyogbmVlZGVkIGZvciBzdHJsZW4gKi8KCnZvaWQgbWFrZV9saW5zcGFjZShpbnQgYVtdLCBkb3VibGUgc3RhcnQsIGRvdWJsZSBzdG9wLCBpbnQgbnVtKSB7CiAgICAvKiBGaWxscyBhcnJheSBhW10gKGluIHBsYWNlKSB3aXRoIGxpbmVhcmx5IHNwYWNlZCB2YWx1ZXMganVzdCBsaWtlIG5wLmxpbnNwYWNlIGluIE51bVB5IChQeXRob24pICovCiAgICBkb3VibGUgc3BhY2luZyA9IChzdG9wLXN0YXJ0KS8obnVtLTEpOwogICAgaW50IGk7CiAgICBmb3IgKGk9MDsgaTxudW07IGkrKyl7CiAgICAgICAgYVtpXSA9IHN0YXJ0ICsgaSpzcGFjaW5nOwogICAgfQp9Cgp2b2lkIG1ha2VfYW5kX3ByaW50X21zZ3MoaW50IG5fcHJvYywgaW50IG1zZ2xlbmd0aCkKewogICAgLyogQ3JlYXRlIGEgc3RyaW5nIGNhbGxlZCBtc2cgb2YgbGVuZ3RoIG1zZ2xlbmd0aCArIDEgKGZvciB0aGUgbnVsbCBjaGFyYWN0ZXIgJ1wwJykgKi8KICAgIGNoYXIgbXNnW21zZ2xlbmd0aCsxXTsKICAgIGludCBpOwogICAgcHJpbnRmKCJtc2cgaW50ZW5kZWQgdG8gYmU6ICAgICIpOwogICAgZm9yIChpPTA7IGk8bXNnbGVuZ3RoOyBpKyspIHsKICAgICAgICBtc2dbaV0gPSAnYSc7CiAgICAgICAgcHJpbnRmKCIlYyIsbXNnW2ldKTsKICAgIH0KICAgIG1zZ1tpXSA9ICdcMCc7CgogICAgLyogUHJpbnQgbWVzc2FnZSB0byBzY3JlZW4gYXMgYSBzdHJpbmcgYW5kIGZpbmUgc3RybGVuKG1zZykgYW5kIHNpemVvZihtc2cpICovCiAgICBwcmludGYoIlxuIik7CiAgICBwcmludGYoIm1zZyBwcmludGVkIGFzIHN0cmluZzogJXNcbiIsIG1zZyk7CiAgICBwcmludGYoInN0cmxlbihtc2cpOiAlZFxuIiwgc3RybGVuKG1zZykpOwogICAgcHJpbnRmKCJzaXplb2YobXNnKTogJWRcblxuIiwgc2l6ZW9mKG1zZykpOwoKfQoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKewogICAgaW50IG5fcHJvYyA9IDI7CgogICAgLyogQ3JlYXRlIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGxlbmd0aHMgb2Ygc3RyaW5ncyB0byBiZSBwcmludGVkIChJbiB0aGlzIGNhc2UsIGRhdGFfbGVuZ3RoIHNob3VsZCBiZSB7MCwgMiwgNCwgNiwgOH0gKi8KICAgIGludCBzdGFydCA9IDA7CiAgICBpbnQgc3RvcF9yYW5nZSA9IDEwOyAgICAvKiB0aGUgc3RvcCB2YWx1ZSBpZiB3ZSBhcmUgdXNpbmcgcmFuZ2UoKSAqLwogICAgaW50IHN0ZXAgPSAyOyAgICAgICAgICAgICAvKiBzcGFjaW5nIGJldHdlZW4gdGhlIGludGVnZXJzIGluIHRoZSBvdXRwdXQgb2YgcmFuZ2UoKSAqLwogICAgaW50IHN0b3AgPSBzdG9wX3JhbmdlIC0gc3RlcDsgICAgLyogdGhlIHN0b3AgdmFsdWUgaWYgd2UgYXJlIHVzaW5nIGxpbnNwYWNlKCkgKi8KICAgIGludCBucG9pbnRzID0gKGludCkgY2VpbCggKChkb3VibGUpc3RvcF9yYW5nZSAtIChkb3VibGUpc3RhcnQpIC8gKGRvdWJsZSlzdGVwICk7ICAvKiAgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBsaXN0IHByb2R1Y2VkIGJ5IHJhbmdlKHN0YXJ0LCBzdG9wX3JhbmdlLCBzdGVwKSAgKi8KCiAgICBpbnQgZGF0YV9sZW5ndGhbbnBvaW50c107ICAgLyogMUQgYXJyYXkgb2Ygc3RyaW5nIGxlbmd0aHMgKCMgb2Ygbm9uLW51bGwgY2hhcnMgaW4gZWFjaCBzdHIpICovCiAgICBtYWtlX2xpbnNwYWNlKGRhdGFfbGVuZ3RoLCBzdGFydCwgc3RvcCwgbnBvaW50cyk7CiAgICBpbnQgaTsKCgogICAgLyogRm9yIGVhY2ggbGVuZ3RoLCBjYWxsIG9uIG1ha2VfYW5kX3ByaW50X21zZ3MgdG8gbWFrZSBhIHN0cmluZyBvZiB0aGF0IGxlbmd0aCAocGx1cyAnXDAnKSBhbmQgdGhlbiBwcmludCB0byBzdGRvdXQgKi8KICAgIHByaW50ZigiICAgaSAgICBkYXRhX2xlbmd0aFtpXVxuLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwogICAgZm9yIChpPTA7IGk8bnBvaW50czsgaSsrKSB7CiAgICAgICAgcHJpbnRmKCIlNGQgJTdkXG4iLCBpLCBkYXRhX2xlbmd0aFtpXSk7CiAgICAgICAgbWFrZV9hbmRfcHJpbnRfbXNncyhuX3Byb2MsIGRhdGFfbGVuZ3RoW2ldKTsKICAgIH0KICAgIHJldHVybiAwOwp9Cg==