summaryrefslogtreecommitdiff
path: root/29_outname
diff options
context:
space:
mode:
authorHaidong Ji2022-04-15 15:51:30 -0500
committerHaidong Ji2022-04-15 15:51:30 -0500
commit442a49ad5a48d417345959b903ae6a6d32d55759 (patch)
treec7127bb497e5e439018b1915e0136eec2c9cb124 /29_outname
Great C programming funHEADmaster
Excellent fundamentals and displine training, many tools and techniques exercises: gdb, emacs, valgrind, git
Diffstat (limited to '29_outname')
-rw-r--r--29_outname/Makefile12
-rw-r--r--29_outname/README18
-rw-r--r--29_outname/grade.txt19
-rw-r--r--29_outname/outname.c11
-rw-r--r--29_outname/outname.h6
-rw-r--r--29_outname/outname_test.c18
6 files changed, 84 insertions, 0 deletions
diff --git a/29_outname/Makefile b/29_outname/Makefile
new file mode 100644
index 0000000..7cdf5f1
--- /dev/null
+++ b/29_outname/Makefile
@@ -0,0 +1,12 @@
+CFLAGS=-Wall -Werror -std=gnu99 -pedantic -ggdb3
+OBJS=outname.o outname_test.o
+PROGRAM=outname_test
+
+$(PROGRAM): $(OBJS)
+ gcc $(CFLAGS) -o $@ $(OBJS)
+
+%.o: %.c outname.h
+ gcc -c $(CFLAGS) $<
+
+clean:
+ rm -f $(OBJS) $(PROGRAM) *~
diff --git a/29_outname/README b/29_outname/README
new file mode 100644
index 0000000..735972e
--- /dev/null
+++ b/29_outname/README
@@ -0,0 +1,18 @@
+In a future assignment, you are going to write a program which reads
+some input, does some manipulations, and produces output in another file.
+Right now, you are going to write a function which will be useful to you
+in that assignment, which takes the input filename, and produces the output
+file name. The output file name should be the same as the input file name
+with ".counts" on the end. So, for example, if the input filename (inputName)
+is "input.txt", your function should return "input.txt.counts".
+
+Note that your function needs to use malloc to allocate memory to hold
+the string that it will return as its answer.
+
+Your function should have the following signature:
+
+ char * computeOutputFileName(const char * inputName)
+
+and you should write it in the outname.c file.
+You can make and test with the main function found in outname_test.c.
+As always, be sure your program valgrinds cleanly.
diff --git a/29_outname/grade.txt b/29_outname/grade.txt
new file mode 100644
index 0000000..12148a6
--- /dev/null
+++ b/29_outname/grade.txt
@@ -0,0 +1,19 @@
+Grading at Tue 14 Dec 2021 02:54:10 AM UTC
+Attempting to compile:
+#################################################
+testcase1:
+Your output is correct
+ - Valgrind was clean (no errors, no memory leaks)
+valgrind was clean
+#################################################
+testcase2:
+Your output is correct
+ - Valgrind was clean (no errors, no memory leaks)
+valgrind was clean
+#################################################
+testcase3:
+Your output is correct
+ - Valgrind was clean (no errors, no memory leaks)
+valgrind was clean
+
+Overall Grade: A
diff --git a/29_outname/outname.c b/29_outname/outname.c
new file mode 100644
index 0000000..7cc4346
--- /dev/null
+++ b/29_outname/outname.c
@@ -0,0 +1,11 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "outname.h"
+
+char * computeOutputFileName(const char * inputName) {
+ char * outFileName = malloc((strlen(inputName) + 8) * sizeof(*outFileName));
+ strcpy(outFileName, inputName);
+ strcat(outFileName, ".counts");
+ return outFileName;
+}
diff --git a/29_outname/outname.h b/29_outname/outname.h
new file mode 100644
index 0000000..acd1f03
--- /dev/null
+++ b/29_outname/outname.h
@@ -0,0 +1,6 @@
+#ifndef __OUTNAME_H__
+#define __OUTNAME_H__
+
+char * computeOutputFileName(const char * inputName);
+
+#endif
diff --git a/29_outname/outname_test.c b/29_outname/outname_test.c
new file mode 100644
index 0000000..6a9493a
--- /dev/null
+++ b/29_outname/outname_test.c
@@ -0,0 +1,18 @@
+#include "outname.h"
+#include <stdio.h>
+#include <stdlib.h>
+
+
+#define NUM_TESTS 3
+int main(void) {
+ char * testNames[NUM_TESTS] = {"input.txt",
+ "anotherTestFileName.txt",
+ "somethingelse"};
+
+ for (int i = 0; i < NUM_TESTS; i++) {
+ char * outName = computeOutputFileName(testNames[i]);
+ printf("'%s' => '%s'\n", testNames[i], outName);
+ free(outName);
+ }
+ return EXIT_SUCCESS;
+}